From cee9c2b0bbf2e85d25e3b8417808ca0dda9a9585 Mon Sep 17 00:00:00 2001 From: Paul Andrews Date: Fri, 29 Mar 2019 23:50:33 -0400 Subject: [PATCH] remove .svn directory --- .svn/entries | 1 - .svn/format | 1 - ...9fd7a6c755a3cedc9d0633df66cd7a677.svn-base | 2 - ...9bb98b73e80715cedac620928e63d225f.svn-base | 167 - ...b2de09f4cef5b2909d2b825e9e85a5b31.svn-base | 621 -- ...a1e443db4b8f5cda9f9f3bf034a1911b4.svn-base | Bin 8755 -> 0 bytes ...d5e1ac54ae2ccb796c3c5eb758b7b9794.svn-base | 233 - ...2930f8dcf89c84667fdacd162bae83555.svn-base | 531 -- ...48979f033b0b529497086f8870e24801b.svn-base | 110 - ...eeb7330f2c477e77b2bd2706a6db9c1d2.svn-base | 45 - ...5a09108dbe6cff684a6d33540ced6ea77.svn-base | 15 - ...d56b9eaf630377c07a099544e1acf8521.svn-base | 50 - ...9ffd743940a63302f2de4edc72e71acef.svn-base | Bin 702 -> 0 bytes ...c85b0e5e555a850a401be7a9af226ec88.svn-base | 25 - ...b0d108f03117c369da9a9cd0abaa3bffb.svn-base | 46 - ...fe3b5121f42113008cff449023db52f27.svn-base | Bin 6242 -> 0 bytes ...5d5befc29b84246eb1e781fcfe3091031.svn-base | 256 - ...8bcf2e049b9a3de5b01dd910b9cddbba9.svn-base | 14 - ...deebf1e43e68fbefd80b0dfb83b9494e5.svn-base | 165 - ...d570dc27c7d2fe9b1c4cfe978f36e1224.svn-base | 50 - ...28f5ebd955428742069f198af910f6a3d.svn-base | 540 -- ...cef93e86b359dec164cd7d9852e8fb1c0.svn-base | 814 -- ...db2fe3a5916008e48a565a6a32a3c32f0.svn-base | 482 - ...7f28fde9604491af9d27bfadf6c3f3e2f.svn-base | 22 - ...c978292fa576e80548775c347d18e0a48.svn-base | 531 -- ...69d751fafca4e5aaa5a5e76bdbf322b0d.svn-base | 208 - ...1d1cf4ce7ab00f1af5ce421adf9eb781e.svn-base | 76 - ...2359ffbafdb07fe8d60e7f95775e6d5ec.svn-base | 2 - ...7b952d7dba6ee01f6b9da274f983a8004.svn-base | 230 - ...bd33c26beb7decb3ba16ff95662af5518.svn-base | 33 - ...1c30de3cbd1bb77fd1a6c7cc93358d8ed.svn-base | 869 -- ...12335b679086d2a131bc1a8dd006832f2.svn-base | 219 - ...7f4e48e6c7fd159024e8f4e22214e9968.svn-base | 15 - ...5ef2a5f02c01621db4b773573a15b430f.svn-base | 163 - ...d94885b9422add5e366bf300d7a6f91ac.svn-base | 53 - ...111a3c96ae76d3a9168b7a5706c678088.svn-base | 603 -- ...b45399d499d334012261d7900eb84051e.svn-base | 232 - ...b69a71c7e58d69fc25107bedce2a565d8.svn-base | 89 - ...b9d6d9ae9827a7eee8c03166b3304a91c.svn-base | 3 - ...c541f68523bd70492f006bdf8772a6f59.svn-base | 35 - ...2c15d659ecfd3fbcb8332395c4dfd4c01.svn-base | 76 - ...11ff68039f9c3b62920f8d71437cd8f37.svn-base | 810 -- ...b839cc9a5db24007a0c72fd46bcca0169.svn-base | 167 - ...d9f3417d264ab519bc2de187c51f9c6c6.svn-base | 165 - ...ca58784c4ab7fabece6edba7db35d82bd.svn-base | 92 - ...f8fd9305c68814933fd6bc428c76e8980.svn-base | 457 - ...266c766a2b208f8dd1105aaf56b5e41d8.svn-base | Bin 1001 -> 0 bytes ...bce0213023170a950341a58b203507c46.svn-base | 23 - ...3089e285ed4366aef03d6b1b50be33515.svn-base | 22 - ...8237e2547cb51363d4ca9d0592490334e.svn-base | 23 - ...1bffee8105ba0d5d022fcbb3aa0e519d7.svn-base | 9 - ...34869d7a65be49521801cdae961781cb7.svn-base | 257 - ...49ccd36225e96b55c7fc6d23283879973.svn-base | 644 -- ...5c28139c67fbacc9b0299790b88716db3.svn-base | 50 - ...ca30e274d4501f788746841a672274508.svn-base | 261 - ...b609ce357db9bf1e80c0edbab223cc536.svn-base | 89 - ...281a2195b3ee0c9a2d7ce200020a08f10.svn-base | 531 -- ...cd1ebc6852fd90fd0a8a8c051ce078ca6.svn-base | 8 - ...b6c9eb90830c8482a5933d6fc9bee6a31.svn-base | 531 -- ...eeabb8197e7681774f7c84eaf0dfb905a.svn-base | 778 -- ...98b60549e2af01a31b75f282e69abd9a5.svn-base | 260 - ...48567bdef4cf57a0ef6a8e0b7c6472bf2.svn-base | 463 - ...af9414edf0dbd3a529240ed512970a0af.svn-base | 456 - ...580aaf0a413e1ce5386454cb9e0de13cc.svn-base | 4 - ...e839817b4a22c9de5f8c22e3ba722936f.svn-base | 814 -- ...e44efbf15df0dbe641a6e615cfbf71fed.svn-base | 648 -- ...972de07b09bfa63d2e50f9ab41ec372bd.svn-base | 4 - ...34a6125d00d7d7ea48fdd899b8dff39ff.svn-base | 157 - ...f17383244c255ddfb06a732e1eca962ad.svn-base | 25 - ...83de688621d8e50aa5a7ee5d39a4138fc.svn-base | 170 - ...0871585130e586ed53e8a2b422b807944.svn-base | 91 - ...d7211471866e74931c9fa6fb0eb8af7b4.svn-base | 28 - ...d6f8f54e937b6824b354ab513c2145fee.svn-base | 14 - ...3997309df1349582396e57b0fa9a7b248.svn-base | 91 - ...0ed460dcd23cc325f8563812929b269fd.svn-base | Bin 9101 -> 0 bytes ...4a3d6b61bebc0d2a8d6b4a55b3eeb7163.svn-base | 531 -- ...867509f637144a92d792dcc4a5d2ea07e.svn-base | 794 -- ...2ded7c0bafb383cf44dd25bc896e02049.svn-base | 43 - ...a5acf4064122c52af26ab34de116a7533.svn-base | 8024 ----------------- ...c84fe5414d0a3b87566a9187269f74c5d.svn-base | 76 - ...35e515e3a4de40579b1ab361c223d6765.svn-base | 60 - ...7c7272bdde8070f851af4584bbc10b2e8.svn-base | 10 - .svn/wc.db | Bin 68608 -> 0 bytes .svn/wc.db-journal | 0 84 files changed, 25307 deletions(-) delete mode 100644 .svn/entries delete mode 100644 .svn/format delete mode 100644 .svn/pristine/00/00cb4c99fd7a6c755a3cedc9d0633df66cd7a677.svn-base delete mode 100644 .svn/pristine/01/019b7099bb98b73e80715cedac620928e63d225f.svn-base delete mode 100644 .svn/pristine/04/04958fdb2de09f4cef5b2909d2b825e9e85a5b31.svn-base delete mode 100644 .svn/pristine/0e/0e72cdba1e443db4b8f5cda9f9f3bf034a1911b4.svn-base delete mode 100644 .svn/pristine/11/11463d6d5e1ac54ae2ccb796c3c5eb758b7b9794.svn-base delete mode 100644 .svn/pristine/13/13adba42930f8dcf89c84667fdacd162bae83555.svn-base delete mode 100644 .svn/pristine/15/1539a2f48979f033b0b529497086f8870e24801b.svn-base delete mode 100644 .svn/pristine/1b/1bef2eceeb7330f2c477e77b2bd2706a6db9c1d2.svn-base delete mode 100644 .svn/pristine/1c/1cdcd215a09108dbe6cff684a6d33540ced6ea77.svn-base delete mode 100644 .svn/pristine/1c/1cfd6a4d56b9eaf630377c07a099544e1acf8521.svn-base delete mode 100644 .svn/pristine/24/24d1a279ffd743940a63302f2de4edc72e71acef.svn-base delete mode 100644 .svn/pristine/25/25284cdc85b0e5e555a850a401be7a9af226ec88.svn-base delete mode 100644 .svn/pristine/27/27a9c0cb0d108f03117c369da9a9cd0abaa3bffb.svn-base delete mode 100644 .svn/pristine/2e/2edfb2ffe3b5121f42113008cff449023db52f27.svn-base delete mode 100644 .svn/pristine/33/3348d145d5befc29b84246eb1e781fcfe3091031.svn-base delete mode 100644 .svn/pristine/34/343318d8bcf2e049b9a3de5b01dd910b9cddbba9.svn-base delete mode 100644 .svn/pristine/36/3695324deebf1e43e68fbefd80b0dfb83b9494e5.svn-base delete mode 100644 .svn/pristine/36/36bc135d570dc27c7d2fe9b1c4cfe978f36e1224.svn-base delete mode 100644 .svn/pristine/37/37e171e28f5ebd955428742069f198af910f6a3d.svn-base delete mode 100644 .svn/pristine/3a/3a91f13cef93e86b359dec164cd7d9852e8fb1c0.svn-base delete mode 100644 .svn/pristine/3a/3af3234db2fe3a5916008e48a565a6a32a3c32f0.svn-base delete mode 100644 .svn/pristine/3e/3e3cd767f28fde9604491af9d27bfadf6c3f3e2f.svn-base delete mode 100644 .svn/pristine/3e/3e44c5ec978292fa576e80548775c347d18e0a48.svn-base delete mode 100644 .svn/pristine/3e/3ede3db69d751fafca4e5aaa5a5e76bdbf322b0d.svn-base delete mode 100644 .svn/pristine/42/423cd571d1cf4ce7ab00f1af5ce421adf9eb781e.svn-base delete mode 100644 .svn/pristine/44/44e96bb2359ffbafdb07fe8d60e7f95775e6d5ec.svn-base delete mode 100644 .svn/pristine/45/454e0f77b952d7dba6ee01f6b9da274f983a8004.svn-base delete mode 100644 .svn/pristine/46/46bbadabd33c26beb7decb3ba16ff95662af5518.svn-base delete mode 100644 .svn/pristine/53/535dbfe1c30de3cbd1bb77fd1a6c7cc93358d8ed.svn-base delete mode 100644 .svn/pristine/54/5404a7c12335b679086d2a131bc1a8dd006832f2.svn-base delete mode 100644 .svn/pristine/54/548de897f4e48e6c7fd159024e8f4e22214e9968.svn-base delete mode 100644 .svn/pristine/5d/5d7ae195ef2a5f02c01621db4b773573a15b430f.svn-base delete mode 100644 .svn/pristine/61/616387cd94885b9422add5e366bf300d7a6f91ac.svn-base delete mode 100644 .svn/pristine/69/695e2a0111a3c96ae76d3a9168b7a5706c678088.svn-base delete mode 100644 .svn/pristine/6a/6aa68e8b45399d499d334012261d7900eb84051e.svn-base delete mode 100644 .svn/pristine/6c/6c87eb1b69a71c7e58d69fc25107bedce2a565d8.svn-base delete mode 100644 .svn/pristine/6e/6e989b3b9d6d9ae9827a7eee8c03166b3304a91c.svn-base delete mode 100644 .svn/pristine/6e/6ef29eec541f68523bd70492f006bdf8772a6f59.svn-base delete mode 100644 .svn/pristine/76/76332fb2c15d659ecfd3fbcb8332395c4dfd4c01.svn-base delete mode 100644 .svn/pristine/76/76c5a7911ff68039f9c3b62920f8d71437cd8f37.svn-base delete mode 100644 .svn/pristine/77/77a8528b839cc9a5db24007a0c72fd46bcca0169.svn-base delete mode 100644 .svn/pristine/79/798e455d9f3417d264ab519bc2de187c51f9c6c6.svn-base delete mode 100644 .svn/pristine/80/802d90eca58784c4ab7fabece6edba7db35d82bd.svn-base delete mode 100644 .svn/pristine/81/81bd5cdf8fd9305c68814933fd6bc428c76e8980.svn-base delete mode 100644 .svn/pristine/84/8489a0b266c766a2b208f8dd1105aaf56b5e41d8.svn-base delete mode 100644 .svn/pristine/8d/8d1647bbce0213023170a950341a58b203507c46.svn-base delete mode 100644 .svn/pristine/92/9274e0e3089e285ed4366aef03d6b1b50be33515.svn-base delete mode 100644 .svn/pristine/97/97acc568237e2547cb51363d4ca9d0592490334e.svn-base delete mode 100644 .svn/pristine/9f/9f13af91bffee8105ba0d5d022fcbb3aa0e519d7.svn-base delete mode 100644 .svn/pristine/a3/a3ecd1734869d7a65be49521801cdae961781cb7.svn-base delete mode 100644 .svn/pristine/a4/a4b56b149ccd36225e96b55c7fc6d23283879973.svn-base delete mode 100644 .svn/pristine/a6/a6ef8615c28139c67fbacc9b0299790b88716db3.svn-base delete mode 100644 .svn/pristine/a8/a8835a2ca30e274d4501f788746841a672274508.svn-base delete mode 100644 .svn/pristine/ac/acdca46b609ce357db9bf1e80c0edbab223cc536.svn-base delete mode 100644 .svn/pristine/b2/b2d44f8281a2195b3ee0c9a2d7ce200020a08f10.svn-base delete mode 100644 .svn/pristine/b5/b5f4b3ccd1ebc6852fd90fd0a8a8c051ce078ca6.svn-base delete mode 100644 .svn/pristine/b6/b6802d4b6c9eb90830c8482a5933d6fc9bee6a31.svn-base delete mode 100644 .svn/pristine/b7/b71483beeabb8197e7681774f7c84eaf0dfb905a.svn-base delete mode 100644 .svn/pristine/b8/b876de898b60549e2af01a31b75f282e69abd9a5.svn-base delete mode 100644 .svn/pristine/c5/c56af0b48567bdef4cf57a0ef6a8e0b7c6472bf2.svn-base delete mode 100644 .svn/pristine/ce/ce01624af9414edf0dbd3a529240ed512970a0af.svn-base delete mode 100644 .svn/pristine/ce/ce821ba580aaf0a413e1ce5386454cb9e0de13cc.svn-base delete mode 100644 .svn/pristine/cf/cf49057e839817b4a22c9de5f8c22e3ba722936f.svn-base delete mode 100644 .svn/pristine/d6/d61a97be44efbf15df0dbe641a6e615cfbf71fed.svn-base delete mode 100644 .svn/pristine/d6/d6c1f41972de07b09bfa63d2e50f9ab41ec372bd.svn-base delete mode 100644 .svn/pristine/d8/d8a0d1734a6125d00d7d7ea48fdd899b8dff39ff.svn-base delete mode 100644 .svn/pristine/d9/d9120a8f17383244c255ddfb06a732e1eca962ad.svn-base delete mode 100644 .svn/pristine/da/da7cec083de688621d8e50aa5a7ee5d39a4138fc.svn-base delete mode 100644 .svn/pristine/dd/dd848e00871585130e586ed53e8a2b422b807944.svn-base delete mode 100644 .svn/pristine/e0/e032176d7211471866e74931c9fa6fb0eb8af7b4.svn-base delete mode 100644 .svn/pristine/e0/e053a2bd6f8f54e937b6824b354ab513c2145fee.svn-base delete mode 100644 .svn/pristine/e3/e3e1be03997309df1349582396e57b0fa9a7b248.svn-base delete mode 100644 .svn/pristine/e7/e79c4f90ed460dcd23cc325f8563812929b269fd.svn-base delete mode 100644 .svn/pristine/e8/e87e5924a3d6b61bebc0d2a8d6b4a55b3eeb7163.svn-base delete mode 100644 .svn/pristine/eb/eb0cbab867509f637144a92d792dcc4a5d2ea07e.svn-base delete mode 100644 .svn/pristine/f0/f0483ff2ded7c0bafb383cf44dd25bc896e02049.svn-base delete mode 100644 .svn/pristine/f4/f40c784a5acf4064122c52af26ab34de116a7533.svn-base delete mode 100644 .svn/pristine/f8/f82d109c84fe5414d0a3b87566a9187269f74c5d.svn-base delete mode 100644 .svn/pristine/fc/fc26a8735e515e3a4de40579b1ab361c223d6765.svn-base delete mode 100644 .svn/pristine/fc/fc55d367c7272bdde8070f851af4584bbc10b2e8.svn-base delete mode 100644 .svn/wc.db delete mode 100644 .svn/wc.db-journal diff --git a/.svn/entries b/.svn/entries deleted file mode 100644 index 48082f7..0000000 --- a/.svn/entries +++ /dev/null @@ -1 +0,0 @@ -12 diff --git a/.svn/format b/.svn/format deleted file mode 100644 index 48082f7..0000000 --- a/.svn/format +++ /dev/null @@ -1 +0,0 @@ -12 diff --git a/.svn/pristine/00/00cb4c99fd7a6c755a3cedc9d0633df66cd7a677.svn-base b/.svn/pristine/00/00cb4c99fd7a6c755a3cedc9d0633df66cd7a677.svn-base deleted file mode 100644 index 3c457f3..0000000 --- a/.svn/pristine/00/00cb4c99fd7a6c755a3cedc9d0633df66cd7a677.svn-base +++ /dev/null @@ -1,2 +0,0 @@ -/*! roundSlider v1.3 | (c) 2015-2016, Soundar | MIT license | http://roundsliderui.com/licence.html */ -.rs-control{position:relative;outline:0 none}.rs-container{position:relative}.rs-control *,.rs-control *:before,.rs-control *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.rs-animation .rs-transition{-webkit-transition:all .5s linear 0s;-moz-transition:all .5s linear 0s;-o-transition:all .5s linear 0s;transition:all .5s linear 0s}.rs-bar{-webkit-transform-origin:100% 50%;-moz-transform-origin:100% 50%;-ms-transform-origin:100% 50%;-o-transform-origin:100% 50%;transform-origin:100% 50%}.rs-control .rs-split .rs-path,.rs-control .rs-overlay1,.rs-control .rs-overlay2{-webkit-transform-origin:50% 100%;-moz-transform-origin:50% 100%;-ms-transform-origin:50% 100%;-o-transform-origin:50% 100%;transform-origin:50% 100%}.rs-control .rs-overlay{-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.rs-control.rs-error{border:1px dotted;text-align:center}.rs-readonly{height:100%;width:100%;top:0;position:absolute;z-index:100}.rs-disabled{opacity:.35}.rs-inner-container{height:100%;width:100%;position:relative;overflow:hidden}.quarter div.rs-block{height:200%;width:200%}.half.top div.rs-block,.half.bottom div.rs-block{height:200%;width:100%}.half.left div.rs-block,.half.right div.rs-block{height:100%;width:200%}.bottom>.rs-inner-container>.rs-block{top:auto;bottom:0}.right .rs-inner-container>.rs-block{right:0}div.rs-block{-webkit-border-radius:100%;border-radius:100%}.rs-block{height:100%;width:100%;display:block;position:absolute;top:0;overflow:hidden;z-index:3}.rs-block .rs-inner{-webkit-border-radius:1000px;border-radius:1000px;display:block;height:100%;width:100%;position:relative}.rs-overlay{width:50%}.rs-overlay1,.rs-overlay2{width:100%}.rs-overlay,.rs-overlay1,.rs-overlay2{position:absolute;background-color:#fff;z-index:3;top:0;height:50%}.rs-bar{position:absolute;height:0;z-index:10}.rs-bar.rs-rounded{z-index:5}.rs-bar .rs-seperator{height:0;display:block;float:left}.rs-bar:not(.rs-rounded) .rs-seperator{border-left:none;border-right:none}.rs-bar.rs-start .rs-seperator{border-top:none}.rs-bar.rs-end .rs-seperator{border-bottom:none}.rs-bar.rs-start.rs-rounded .rs-seperator{border-radius:0 0 1000px 1000px}.rs-bar.rs-end.rs-rounded .rs-seperator{border-radius:1000px 1000px 0 0}.full .rs-bar,.half .rs-bar{width:50%}.half.left .rs-bar,.half.right .rs-bar,.quarter .rs-bar{width:100%}.full .rs-bar,.half.left .rs-bar,.half.right .rs-bar{top:50%}.bottom .rs-bar{top:0}.half.right .rs-bar,.quarter.right .rs-bar{right:100%}.rs-handle.rs-move{cursor:move}.rs-readonly .rs-handle.rs-move{cursor:default}.rs-path{display:block;height:100%;width:100%}.rs-split .rs-path{-webkit-border-radius:1000px 1000px 0 0;border-radius:1000px 1000px 0 0;overflow:hidden;height:50%;position:absolute;top:0;z-index:2}.rs-tooltip{position:absolute;cursor:default;border:1px solid transparent;z-index:10}.full .rs-tooltip{top:50%;left:50%}.bottom .rs-tooltip{top:0}.top .rs-tooltip{bottom:0}.right .rs-tooltip{left:0}.left .rs-tooltip{right:0}.half.top .rs-tooltip,.half.bottom .rs-tooltip{left:50%}.half.left .rs-tooltip,.half.right .rs-tooltip{top:50%}.rs-tooltip .rs-input{outline:0 none;border:none;background:transparent}.rs-tooltip-text{font-family:verdana;font-size:13px;border-radius:7px;text-align:center}.rs-tooltip.edit,.rs-tooltip .rs-input{padding:5px 8px}.rs-tooltip.hover,.rs-tooltip.edit:hover{border:1px solid #aaa;cursor:pointer}.rs-readonly .rs-tooltip.edit:hover{border-color:transparent;cursor:default}.rs-handle{border-radius:1000px;outline:0 none;float:left}.rs-handle.rs-handle-square{border-radius:0}.rs-handle-dot{border:1px solid #aaa;padding:6px}.rs-handle-dot:after{display:block;content:"";border:1px solid #aaa;height:100%;width:100%;border-radius:100%}.rs-seperator{border:1px solid #aaa}.rs-border{border:1px solid #aaa}.rs-path-color{background-color:#fff}.rs-range-color{background-color:#54bbe0}.rs-bg-color{background-color:#fff}.rs-handle{background-color:#838383}.rs-handle-dot{background-color:#fff}.rs-handle-dot:after{background-color:#838383} \ No newline at end of file diff --git a/.svn/pristine/01/019b7099bb98b73e80715cedac620928e63d225f.svn-base b/.svn/pristine/01/019b7099bb98b73e80715cedac620928e63d225f.svn-base deleted file mode 100644 index 2fdc40d..0000000 --- a/.svn/pristine/01/019b7099bb98b73e80715cedac620928e63d225f.svn-base +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - ${eclipse_home} - - String getProperty(Properties props, String key, int level) { - def value = null - value = props.getProperty(key); - if (value != null) { - // Get the index of the first constant, if any - def beginIndex = 0; - def startName = value.indexOf('${', beginIndex); - - while (startName != -1) { - if (level+1 > 5) { - // Exceeded MAX_SUBST_DEPTH - // Return the value as is - return value; - } - - def endName = value.indexOf('}', startName + 1); - if (endName == -1) { - // Terminating symbol not found - // Return the value as is - return value; - } - - def constName = value.substring(startName+2, endName); - def constValue = getProperty(props, constName, level+1); - - if (constValue == null) { - // Property name not found - // Return the value as is - return value; - } - - // Insert the constant value into the - // original property value - def newValue = (startName>0) - ? value.substring(0, startName) : ""; - newValue += constValue; - - // Start checking for constants at this index - beginIndex = newValue.length(); - - // Append the remainder of the value - newValue += value.substring(endName+1); - - value = newValue; - - // Look for the next constant - startName = value.indexOf('${', beginIndex); - } - } - - // Return the value as is - return value; - } - - def props = new Properties() - - props['eclipse_home'] = properties['eclipse_home'] - props['project_loc'] = properties['project_loc'] - new File(properties['project_loc'] + './.settings/org.eclipse.cdt.core.prefs').eachLine { line -> - if ((matcher = line =~ /.*\/([AJ].+)\/value=(.+)$/)) { - props[matcher[0][1]] = matcher[0][2] - } - } - props.each{ k, v -> - properties[k] = getProperty(props, k, 0) - } - - properties['A.BUILD.SPIFFS_SIZE'] = Integer.parseInt(properties['A.BUILD.SPIFFS_END'].substring(2),16) - Integer.parseInt(properties['A.BUILD.SPIFFS_START'].substring(2), 16) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.svn/pristine/04/04958fdb2de09f4cef5b2909d2b825e9e85a5b31.svn-base b/.svn/pristine/04/04958fdb2de09f4cef5b2909d2b825e9e85a5b31.svn-base deleted file mode 100644 index ccbf197..0000000 --- a/.svn/pristine/04/04958fdb2de09f4cef5b2909d2b825e9e85a5b31.svn-base +++ /dev/null @@ -1,621 +0,0 @@ -#define ONE_TUBE -#define NEOPIXELS - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#define OTA -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#ifdef NEOPIXELS -#include - -#define PIN 1 - -// How many NeoPixels are attached to the Arduino? -#define NUMPIXELS 8 - -// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals. -// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest -// example for more information on possible values. -Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); -#endif - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock oneNixieClock(pDriver); -NixieClock *pNixieClock = &oneNixieClock; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Test"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *time_format = &ConfigSet1::time_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *indicator = &ConfigSet1::indicator; - BooleanConfigItem *scrollback = &ConfigSet1::scrollback; - IntConfigItem *digits_on = &ConfigSet1::digits_on; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - BooleanConfigItem *dimming = &ConfigSet1::dimming; - BooleanConfigItem *display = &ConfigSet1::display; - BooleanConfigItem *hv = &ConfigSet1::hv; - ByteConfigItem *voltage = &ConfigSet1::voltage; - IntConfigItem *digit = &ConfigSet1::digit; - ByteConfigItem *count_speed = &ConfigSet1::count_speed; - - // UPS config values - ByteConfigItem *charge_rate = &ConfigSet1::charge_rate; - BooleanConfigItem *lpm = &ConfigSet1::lpm; - ByteConfigItem *wakeup_time = &ConfigSet1::wakeup_time; - ByteConfigItem *sensitivity = &ConfigSet1::sensitivity; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - time_format = static_cast(config->get("time_format")); - hour_format = static_cast(config->get("hour_format")); - fading = static_cast(config->get("fading")); - indicator = static_cast(config->get("indicator")); - scrollback = static_cast(config->get("scrollback")); - digits_on = static_cast(config->get("digits_on")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - dimming = static_cast(config->get("dimming")); - display = static_cast(config->get("display")); - hv = static_cast(config->get("hv")); - voltage = static_cast(config->get("voltage")); - digit = static_cast(config->get("digit")); - count_speed = static_cast(config->get("count_speed")); - - // UPS config values - charge_rate = static_cast(config->get("charge_rate")); - lpm = static_cast(config->get("lpm")); - wakeup_time = static_cast(config->get("wakeup_time")); - sensitivity = static_cast(config->get("sensitivity")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -bool timeInitialized = false; - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSMenuHandler wsMenuHandler(ups); -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); -WSUPSHandler wsUPSHandler(rootConfig, "ups", ups, usbRating); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsUPSHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else { - if (strcmp(key, "tube_type") == 0) { - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - initClock(); - broadcastUpdate(*item); - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ -#ifdef NEOPIXELS - pixels.begin(); // This initializes the NeoPixel library. - pixels.setBrightness(0); - pixels.show(); -#endif - - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - -#ifdef NEOPIXELS - // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one. - - if (nowMs > nextMs) { - nextMs = nowMs + 15; - pixels.setBrightness(255); - - // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255 - for (int i=0; i< NUMPIXELS; i++) { - pixels.setPixelColor(i, pixels.Color(abs(r - 255),30,30)); // Moderately bright green color. - } - - pixels.show(); // This sends the updated pixel color to the hardware. - - r = (r + 1) % 510; - } -#endif - - if (timeInitialized) { - pNixieClock->setClockMode(true); - pNixieClock->setCountSpeed(60); - } else { - pNixieClock->setClockMode(false); - pNixieClock->setCountSpeed(60); - } - - pNixieClock->setFadeMode(0); - pNixieClock->setTimeMode(true); - pNixieClock->setDateFormat(1); - pNixieClock->setShowSeconds(false); - pNixieClock->set12hour(false); - pNixieClock->setOnOff(6, 0); - pNixieClock->setDigitsOn(1500); - pNixieClock->setScrollback(true); - - pNixieClock->loop(nowMs); - timedFunctions.loop(); -} diff --git a/.svn/pristine/0e/0e72cdba1e443db4b8f5cda9f9f3bf034a1911b4.svn-base b/.svn/pristine/0e/0e72cdba1e443db4b8f5cda9f9f3bf034a1911b4.svn-base deleted file mode 100644 index 9e5d5379f60e6153cd1af5cdfbd0dfc543937dae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8755 zcmb7~byQT{*T?V7z|b91(lE4imw#cLq$$WNyo&)N(bX)prm9Id%(#jAS^6Q%PJxL zP*9pjNLb+KNkFKmsF>)Oq*z#_0`!#h0{?Hj?Er9)!2lS5fN%gX4hVt+y6pnU?gj~l zfPRkmKZb;ifCzw?kux2O1OOp?uRa;ed`E3=>~k zV?5+aIadBx02rTgVw-s7hbX3aab5>+myvUU#7i(CWzJ#^lG~%#t{fv9HJSg40Fe?@ zG+BOTCVnT>`Ic4fP&$BDKL2_hS>v2Vj)sIYm&j)~?AgB}0HSVjmZK>!FRv7vNqqfu z6iPlH5(#EoJVxcWC!9jSH#VI5e+M8hh7B@#`f+pj?uk7oPMn!&_zjw-TVpr;7ISxpO+28wydIGaVus>8|{u z`Kx=$WSq~sGZ1G4=vG(%NdTvlfjzdP2DkXB^TTJWwiW*%LST^EY!;J`h8HwA4m;{9 z;TZRG|3Rj)Wi_<1VJq_s!3O0%h89M!4CU9IH|J@&18~li+514+t+KuabXd?#< z{i+1xu**3VZU-X->Qn$oWKY0qJP4_Bzp5ZfOuo#dxLCmbcUIy61bH=t=vN6yYXm(3 zgX2DcSyM;(E4=HYOF%f}hRTBQ0U_|rA2@(uVmq=}EQ1cv;*R+INdT_GSpnh)p?_ik z>WB;_xC8f>-}-;0%n!)`G@BQH3eq|{Fi$-5i* z+Wv?G`nbWWEPqHbcWRCSzvu1IdZxeTl)q1e%pc$bqqh0uS&@h|tK07PKO4>b6Nad2 za>-(*)@-%?i2^fm4x6Ak!e?`Tq$If2WbKy^ZbAKSNWSQA+YjZ<=55=4hX8=dU5+Fwk1%cT^CyZmflo#A0cQF$fBkMq{ZE6x zSL6o%PJVhQkGWWh8~)5lz`5}iyW)R_0V71eWU>G1P)Nb-*ssIAJ;#RRMePvH}XkBj|HE9y8mutxT`3#-%Y%Ctj5v5 zQxNuFa~PpbrR{e}@NCrwX(!bP03GO6yZz3+@asDPum>eOfUu^N`5Q;_l?Q;i1oqdm z8ePEshUaa+DX=(WGAO~8FbC`4*pLVYUb^AmBmkl?w-0IdVv-SLC_GquEJ6G7cMWqE zA)xd4ZjxbfQqtdj*#1!f}oW!sk6w-1dhTtuD1l4q=OCrU7?fM@$aI`Ex3=983$hKA@@ zD9%MM&1k&y{b(k8zIlYWZ$GShyk6m1RO`rmfMQ!n5?A(ELlbAKY8NmByE>ZRG!a+} zGE1$}+ya~_V7iwGYEqrS@R1su`kcepOnjpG>xq1RTU&0czOE!=UI-(;L1@*C{nzVc z##PS`yagWsbD1iKm}W>#XmENd&qXg=bJ4~anC&T6iS$-sOyv$ED|t=VVTq2U&ZTm0D7=_f>5Rko zlAVhUF2ThIBr17qy^RHt=hPJ)JRt%}07dPLLjeYL4Ej1f_+ z*mSJpn`zfhv`9;|f$FYW8nRuB83gum$;Qs_^tJ{JF|h)V68&DBLK|98%yE)tH@w67 z3}miTg78u%p~)J75$@Of(+w#PpQdXxFCA!=;Y|(Q0_f51B|I%tVX2%gE8{I>Rocjw z@{Ie$CbvMn9ESn8u84g^AZ2c2J;^-XI|gJNSC+7+Cf&#trMGb{OuMGz{dzg;2W7^Z zq1))a0~s)-2fkz;?hY1{*;nuWV;x8hK9US~dmF~u;47%i+$-cJM=OTn6dW?{Pj=gH zFxKPUJFEuH-X9Inh(D9@f(;)gljH3%d1HOn&X{9&A*0C3V?RRG*Q$@5nn4~-r!tfv za<+tnKF=8iH$s zaYfIQHg$8<_Q2AsbX_I53D)7Noab8l@G<%D_6I>Sf2kPa@B1fheTdQ8#)PJXmC>J5 zP+j+z#4pH%$w!4#M_EoZ^=p?525qC>dO^UHE68IeJpMH251y>-Vh@V9 z#O&@z9zV4t)oRn@-6Mff6@Q{-zhkM5ka3S342{>JXw?$!w6+h;s&78P`5erfm*BL$ z7(tdJGiDxNedg}0a_#5Ks+LL-q8$~24(g-Vbq+qNP{v|Qk1U;LJXXr zZS5!1<(@Sg+OaF5JT;RA$THmn9lo^kj!fG>AuwAfFbvr*m!L3?u@dBndvRRzx&Vui z3*imLv=+w)UvE*8tX4>0oqvzN$;JliU_Qanees7FC&NY@DOwb!64{mKCqi4{(*QyiDJkoSn~7~18L#BsuI}g(DkY21<2OC_G;^Gvl+Wz1Bxum51NZL-$$Qoj z*~7@E@JpE3oBNMq)@^OPtAi_Xn8Fz39uVHxzdf)Q=}9z2I^))oT~?F#giYVnyIG|2 zt_gk;SYMAc-yP(0suRKOY{=XOJ)fykVzc^=HTz}HWiqhL3u(vK)7tcr_Zv=)UII-G zsp|bu?!?#a$*<ke5}QEitYC^))QRX-_q{Tx?D^toMeu8TF-1m_95 zv^Pv91~Ei-!iR?3MtfDRT;W6xO${cAb|F zEfqrxe3t(iwJ8T(@j~`p&*qF>M)GWyj(-2t0=@zzi_fdilf8sjX10&HI7eKU$EVgc zI=>Xu_P<)Fy7s9|b7B2@YOoATxfk-Hw^6xss%>72t3v}-m6-IbO4E33$rQ~oY)OizM4J~DrR3m(TGut3q-n`((InB!BXBVhl2Mm)97g(VgM7!14Uv z64lU8ceDnQxyaP<6&=uwI&h~VhizlekQ)CpD zF6+V(;ic7Hp7IYR#AMMPt576bilhURZQl}{eUS~#j5zi4i8(qR_~M8-3a9`&)aiQdojcODM1>?zRo_!=Tj z_^?}8O~vAfTsbI5eZtsrlbCs(0B7mrT=6Shieoye9D1TBX1+!xVmpJU7Z$nidKp4K zIt`LJX!g6)k5?1eSFGgZTayJBHAme`&-CZTdd2`<3BEb?{B%2Vt~A_Q(4bE(Q*h1ZJs8yLRNm?#*^ROkYOUz@?-Eaj%R7|-S)n=a#^a)%a_|v zO~}zT^@j=@n=nx|W2N4#zwpW(banO@%`kpFeV(vOm9`91omvpsJZ(9;^t%OI`zH}C zz_PbMx$d%9;e+!R0a}%x$EnLlr{61l$}kx?XLQ&Tv5bhgq^9T3rgl=UO4V19Q_!gV zQ2oAt3vHBkXIpUT*qG7^w@R!*)xjy2z>_V^0@#T@ZfyI|h)=A%l8FGQfkC3pC2SJ3i;locApTf z;$@JWs}V5OQ;3E#h=XYz5}|jub}{Xza(+cc)P}r=>^q67%)Y$}@+q9wfqi&M2#z|% z3UfoJ&$0+UG3eGYRc;aKW*vK4%s2!Vp_j=;2Y*?Ara13$l&lHm^8wgoOAwJ=<*1W# zr_{mwqmHEH_}cZsz%aU)Hg~%Z!9=(>sJHnbBbB5VN+h?*uV!B_xn8mQz+@1^Vz1^0 zD~zr$WM~q~{KD2*&X*a1u;=m{VYh(Opt9%zD^H+K!{d*5 zxTzV5h87rF1rMi^Hi-y{1g4$(Ioh2xrIe!HH+Q?RReZ$~T*chl8?jiAEmh(%QAFV( zGQ1ov_QW-{@8KoBlN6p*agmKyqcy@y*GyYgb^JSM#}do%c`(w%}8g* z_t*gL{&WgHQc3a^f4=f;&I3RT%`@SAN95B}J7W*;*Dgw9yqbYUFgo=+xkbP=EOPXp zsa&MF4hU*>(8D5x@T1?4;fckRyGwpwg0AZx=UI}e|L4oL)Y#JXwC zd#1m4sSQ#M7+PyNx8bswHP46^nHs+7YY1ToYGHXk8kT11I_Te@l%;xBbRLW*6X3Y) zJ&noY0Cww0>(2Um*8An8j5xUnZRz<8lIuN^Q5Lf719cyLgi5AF7X7zQtGv&!R=zLk zdFi#v_qpFF(eJ@j_$Gof(s`bCA?7oq5N*4!PQf-4{a*8`-2yuUZ;3Pnd8YUHn@GEa(Eh6R`F$0~fs(w#Ti{x#>L^!A zHX0)c6iFgK#*2UTgZ* zC*>F~PKTsZnh&!dK9%)uvI+u3--`;y-DZYh=yEgp3 zOP^h6pAF;D(AQK`k3Q$VFK5WQK*f0AqSPie8u6J9Fe+gs;Sf3B%Rds+Nh%X98Spt= zsz4}&S9ZgC-{}L|gBtaQ%JU^4UY&N6?u#`V>ELh@eqnW}P(XOQjafTO-3f05D;j<1 zwcr)Ul@gOn$!>12Rd{%-^_Oz=&F!jBo(f)4FXI}jZvjiYxcnK@TlD^H4k)P5UXv3-ArvzP2}5dBE8VvgWN zkxmAN*gWqiWy>%(>do}#Qaar-28!jqCbs0^4v4yL>hKu6W=I2 ze6FnQc5d}5Nhu8@cxCl?bj;fSZlN*6?zYemqy_|`q^X&+gh>uv_iUyYI}JZ;J@qotlHf?ft90V+E+sxp_Ice9<}8($ zF2nElhQ4m;+j5hlV>L&Q+?q<&bw;hSsev1c{Q0P%fNq}2kT`@`banqh=9X&=yd!TT zYJ@UVLpSP6!ny~#BcfV(jKQl`a|b_?L!(tDqP>Vp+zB$pH+k9=Zla4S*|aRKBIWDX zPDUi>q=pT8mR=q~-7yypD>={0T9cFndcM*SS_sRDE|C%Ga0kvkLRtu}m9$e$4Sw}S z(J|U3S=n>&@S$pdEksUJuXW+A+ z&xazVD^>M5SMr#`|Iq916zIOz#3`5FIf zaUa)_>5EkCB|0fT#*c+-36il0Z#n~_L}uO^Mfqh@_GqU8sExqrp@Sl>^SbF6PR9cC%6JYmqM~-6 z8$z+!+v?pR}S$d4b{`0cxQJBB)!aVf{ukv`nE`e8rcE6`~o4@2@Se~Za3-KpMz zc9m*jJ8mO(PG?||63)ihX7+-=6O!p4_#I*61x<1674yrFa8z&Y!iE5`vstmqpaRC? zF)4DIhz!;fgT6GxU2|_7`|TwWuYje?U4G7ot1rL9${HbD^o?@nh!cmx~%GCDeyA|5EZOIV!BF&Z%pgb}H0qJ9bO00zE|gZo!gr2mxgeWlP_y z&02@NmMcT852|Sxwo8YrbGXyO!z&Aw8S{_nWJtVq&F-3ayWwd-VS z{K?|0_VUk0;js98uUDsdxl?w2+=dQ?*v)TTK)P=W)SxJ-(*7YZ?BZvB-g6hpiiab~ zN8|k24N5YFZ@8l{sWEK40I_%x(NdnP~PW$1GJH3*WHH$a@c+)BE9akw2zkUtR{~mYlN{a;cAppYMBf~K7}8` zz3IjM^wWI5l{ep~uA5gXm%V8mSV!vFjlIIkQ%{i5B}kM<3I;WOAm8p+6~}ffgj0RJ zyR1U@X;U{+{n3*gvD6$ltt3ODb{((ZevYGmRwjTeOjieG9DS2DQ}qG7#x`59RK8mp zv(Cen5G}($h?kq3zQ}+0#C;hSe+!Ix2BE0(5F>rE$#*i2<8vVD&!rcl-P?a~w{yqc z?!wLT zX148XHejFo(j6%3xoSbJ+f7k1O#=cbyHv}L;!>VxTV+z=1RBq2x4_woPFEWO3!b+C z4qpt-_=nUczNJQDS~~!>-oxm{J&DM-om|1|k0yrTAl(zOr;@FwU&YM&#w~=e4mNOX z(qG=q$I2e(1nlQhVd;qq)uiwJ420^+D7d)GS{L_xQ5tcmzb`! z(|eO?J{bAg!}dt(s1yb-nX|-7+ToVL2J91i_@X7iz6*Nx zX2+;+*WKw%hL&=-Y~`5k6tNfb(f#@WVSOMd+m~Pl z?xRK0^Q*lJX2p*-AQktDs^VS6KUp zn~jXgZ-l`{3l>*%ko%ToK9ZJV3>`G%06%GjbJ z$_&+o6(-3#7H4%mT*I)b|H!1#SVez6({x-=>D^Q3DN~m0ylz|6`Eo(Z@Fr+zsx#?+ z%l4eSctcQGoFGy}&$mXnaLd$Lg3gzgiLVNZPx@B}dv4&#eY_Sz`zeAr|CpKRV?l1hPDuc=1NUiM5QP9yRZc5~ujVLu7eWfAA z>Kp41O0r(=tY|z*sH_RS1+d^(A~sGOIWFu&4xMn)A4K=JF(&;_Xw4L_w`W6YBlI$* zh}k$eWi#JhkX&}^!4!{@F);{`+zll!10NlGtVhoBclF<`eKKU8LB#!K_4ej{l#I@g zohFilN3C7UB^=mrKPDAD+r@lJCg0Q;!w|=1p-W89>Y41LK|wKX@3(AzA$bOD_oPLZ kf4&`o^N+VCe%4e#+h0Wz7z7f#dyM^mDDGak_)9VOKLG^F=Kufz diff --git a/.svn/pristine/11/11463d6d5e1ac54ae2ccb796c3c5eb758b7b9794.svn-base b/.svn/pristine/11/11463d6d5e1ac54ae2ccb796c3c5eb758b7b9794.svn-base deleted file mode 100644 index aa065d9..0000000 --- a/.svn/pristine/11/11463d6d5e1ac54ae2ccb796c3c5eb758b7b9794.svn-base +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(express.static('web')); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"4": { "url" : "presets.html", "title" : "Presets" }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200 - }, - "3": { - 'show_date': 1, - 'effect': 2, - 'display': true, - 'test': 60, - 'reset_time': 2500, - 'set_time': 200 - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/13/13adba42930f8dcf89c84667fdacd162bae83555.svn-base b/.svn/pristine/13/13adba42930f8dcf89c84667fdacd162bae83555.svn-base deleted file mode 100644 index b984450..0000000 --- a/.svn/pristine/13/13adba42930f8dcf89c84667fdacd162bae83555.svn-base +++ /dev/null @@ -1,531 +0,0 @@ -eclipse.preferences.version=1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/value=arduino.ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/value=ESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/value=ESP8266_ESP01 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/value=${A.RUNTIME.PLATFORM.PATH}/cores/${A.BUILD.CORE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/value=-DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/value=40 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/value=eagle.flash.1m256.ld -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/value=dout -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/value=1M -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/value=80000000L -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/value=-DLWIP_OPEN_SRC -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/value=-llwip_gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/value=${ProjName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/value=4096 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/value=0xFB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/value=256 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/value=0xBB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\variants\\generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/value=generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/value=xtensa-lx106-elf-ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/value=cru -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/value=xtensa-lx106-elf-as -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/value=-g ${A.COMPILER.WARNING_FLAGS} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" "-T${A.BUILD.FLASH_LD}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/value=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 ${A.BUILD.LWIP_LIB} -lstdc++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -MMD -std\=gnu99 -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/value=xtensa-lx106-elf-g++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -MMD -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/value=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I${A.COMPILER.SDK.PATH}/include" "-I${A.COMPILER.SDK.PATH}/lwip/include" "-I${A.BUILD.PATH}/core" -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH}/bin/ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp -MMD -mlongcalls -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/value=xtensa-lx106-elf-size -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Wextra -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/value=-w -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL} -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/value=3600 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/value=1533343096 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/value=1533357496 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/value=-18000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/value=${JANTJE.BOARDS_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-ar" cru "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/arduino.ar" "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lib" "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/ld" "-Teagle.flash.1m256.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -Wl,--start-group -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-LC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -Wl,--start-group ${A.OBJECT_FILES} "${A.BUILD.PATH}/arduino.ar" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group "-L${A.BUILD.PATH}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -std\=gnu99 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13/esptool.exe" -eo "C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/bootloaders/eboot/eboot.elf" -bo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.bin" -bm dout -bf 40 -bz 1M -bs .text -bp 4096 -ec -eo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.RUNTIME.TOOLS.ESPTOOL.PATH}/${A.COMPILER.ESPTOOL.CMD}" -eo "${A.RUNTIME.PLATFORM.PATH}/bootloaders/eboot/eboot.elf" -bo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -bm ${A.BUILD.FLASH_MODE} -bf ${A.BUILD.FLASH_FREQ} -bz ${A.BUILD.FLASH_SIZE} -bs .text -bp 4096 -ec -eo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -g -x assembler-with-cpp -mlongcalls -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-size" -A "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.data|\\.rodata|\\.bss)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/value=^(?\:\\.irom0\\.text|\\.text|\\.data|\\.rodata|)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/value=10802 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/value=${JANTJE.COM_PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/value=ARDUINO -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESPTOOL.NETWORK_CMD} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/value=python.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/value=${A.RUNTIME.TOOLS.ESPTOOL.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/value="${A.TOOLS.ESPTOOL.NETWORK_CMD}" "${A.RUNTIME.PLATFORM.PATH}/tools/espota.py" -i "${A.SERIAL.PORT}" -p "${A.TOOLS.ESPTOOL.NETWORK.PORT}" "--auth\=${A.TOOLS.ESPTOOL.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/value=-vv -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL.PATH}/${A.TOOLS.ESPTOOL.CMD}" ${A.TOOLS.ESPTOOL.UPLOAD.VERBOSE} -cd ${A.UPLOAD.RESETMETHOD} -cb ${A.UPLOAD.SPEED} -cp "${A.SERIAL.PORT}" -ca 0x00000 -cf "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/value=esp -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/value=mkspiffs.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/value=${A.RUNTIME.TOOLS.MKSPIFFS.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/value=81920 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/value=761840 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/value=stk500v1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/value=nodemcu -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/value=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/value=2.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\boards.txt -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/value=esp8285 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/value=COM13 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/value=C\:\\Users\\mpand\\eclipse\\ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/value=${eclipse_home}/arduinoPlugin/tools/make/ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/value=CpuFrequency\=80\nFlashSize\=1M256\nResetMethod\=nodemcu\nUploadSpeed\=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.HEX.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/value=win32 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/value=ITS1A -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/value=Default -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/value=C\:\\Users\\mpand\\eclipse-workspace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${SystemRoot}\\system32${PathDelimiter}${SystemRoot}${PathDelimiter}${SystemRoot}\\system32\\Wbem${PathDelimiter}${sloeber_path_extension} -environment/project/io.sloeber.core.toolChain.release.34549407/append=true -environment/project/io.sloeber.core.toolChain.release.34549407/appendContributed=true diff --git a/.svn/pristine/15/1539a2f48979f033b0b529497086f8870e24801b.svn-base b/.svn/pristine/15/1539a2f48979f033b0b529497086f8870e24801b.svn-base deleted file mode 100644 index 2f29b6a..0000000 --- a/.svn/pristine/15/1539a2f48979f033b0b529497086f8870e24801b.svn-base +++ /dev/null @@ -1,110 +0,0 @@ -const gulp = require('gulp'); -const plumber = require('gulp-plumber'); -const htmlmin = require('gulp-htmlmin'); -const cleancss = require('gulp-clean-css'); -const uglify = require('gulp-uglify'); -const gzip = require('gulp-gzip'); -const del = require('del'); -const useref = require('gulp-useref'); -const gulpif = require('gulp-if'); -const inline = require('gulp-inline'); -const inlineImages = require('gulp-css-inline-images'); -const favicon = require('gulp-base64-favicon'); -const fs = require("fs"); -const readLine = require("readline"); -const log = require("fancy-log"); - -var props = {}; - -gulp.task('test', function() { - var lineReader = readLine.createInterface({ - input: fs.createReadStream(".settings/org.eclipse.cdt.core.prefs", "utf8") - }); - lineReader.on('line', function (line) { - var matcher; - var matched = line.match(/.*\/([AJ].+)\/value=(.+)$/); - if (matched) { - props[matched[1]] = matched[2]; - } - }); - lineReader.on('close', function() { - log(props); - }); -}); - -/* Clean destination folder */ -gulp.task('clean', function() { - return del(['data/*']); -}); - -/* Copy static files */ -gulp.task('files', function() { - return gulp.src([ - 'web/**/*.{jpg,jpeg,png,ico,gif}', - 'web/fsversion' - ]) - .pipe(gulp.dest('data/')); -}); - -/* Process HTML, CSS, JS --- INLINE --- */ -gulp.task('inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: cleancss, - disabledTypes: ['svg', 'img'] - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -gulp.task('buildfs_inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: [cleancss], - disabledTypes: ['svg', 'img'] - })) - .pipe(inlineImages({ - webRoot: "web" - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -/* Process HTML, CSS, JS */ -gulp.task('html', function() { - return gulp.src('web/*.html') - .pipe(useref()) - .pipe(plumber()) - .pipe(gulpif('*.css', cleancss())) - .pipe(gulpif('*.js', uglify())) - .pipe(gulpif('*.html', htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - }))) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}); - -/* Build file system */ -gulp.task('buildfs', ['clean', 'files', 'html']); -gulp.task('buildfs2', ['clean', 'files', 'inline']); -gulp.task('default', ['buildfs_inline']); - \ No newline at end of file diff --git a/.svn/pristine/1b/1bef2eceeb7330f2c477e77b2bd2706a6db9c1d2.svn-base b/.svn/pristine/1b/1bef2eceeb7330f2c477e77b2bd2706a6db9c1d2.svn-base deleted file mode 100644 index 1155741..0000000 --- a/.svn/pristine/1b/1bef2eceeb7330f2c477e77b2bd2706a6db9c1d2.svn-base +++ /dev/null @@ -1,45 +0,0 @@ -
-
-

Alexa

- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
diff --git a/.svn/pristine/1c/1cdcd215a09108dbe6cff684a6d33540ced6ea77.svn-base b/.svn/pristine/1c/1cdcd215a09108dbe6cff684a6d33540ced6ea77.svn-base deleted file mode 100644 index 5585685..0000000 --- a/.svn/pristine/1c/1cdcd215a09108dbe6cff684a6d33540ced6ea77.svn-base +++ /dev/null @@ -1,15 +0,0 @@ -
-
-
-
- Edit the preset names - - - - - -
-
- Close -
-
diff --git a/.svn/pristine/1c/1cfd6a4d56b9eaf630377c07a099544e1acf8521.svn-base b/.svn/pristine/1c/1cfd6a4d56b9eaf630377c07a099544e1acf8521.svn-base deleted file mode 100644 index 5667080..0000000 --- a/.svn/pristine/1c/1cfd6a4d56b9eaf630377c07a099544e1acf8521.svn-base +++ /dev/null @@ -1,50 +0,0 @@ -
-
-

LEDs

- - -
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- - -
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
diff --git a/.svn/pristine/24/24d1a279ffd743940a63302f2de4edc72e71acef.svn-base b/.svn/pristine/24/24d1a279ffd743940a63302f2de4edc72e71acef.svn-base deleted file mode 100644 index 8407d61aa6175f22480e0b45badb857344bafeee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U=#`P32_B-Crz4UXlTgA#bs}A z9}yA30|xy3{0a&RT3T9JSy?~@rKP1D92{(HYytuTEG#U%yu94p+(0#gf`UMee0+Su z!ool<5C9pnva&)#LZYIgN=iyV1`t?UTDrTti;Ig(OG`sYAj8beOkQ4IQ&ZExz`)qp z*vrdHPfyR+*EcdU5@>I1Y^P@Pf!2w;R7%&n6X`!=pyy=vLq=@YseYpVz|YG}M@vIPMnr(+&6Va-pe_GBT^vI!PPa~QEn;>QV5t^c;%ewEX1sXj zOv%&#|F?@ioNapfoVTozzia)BGciF*G1p&Tk$dqs)T1<(ohdBen)}U(rlebCd>_3} zM1PI)x{&;D(X?i{pXX}UviY^1`*!Bl2MddPJrh{=tGp{ee)ZkjNH&wm#FBSME-38U zA~0{#tjZ#WyJ<|n)x>AX&f!Q6$WriIBKmFq(|z-Kl(xm>I~A>4mwcg9wPEf5Ca%}^ zjp}9@%BO$z_rB=(oMv_F@t-SRnLT1>T`s5p(Fl$gI2?UXVcMZN-@9EZ53sp1WG}n5 zpCLl*)dI#f%mMogShhqL&e3WXYqINnx6{br5Z}iyp6B@YtWqgXU#k=c3 -
-

Presets

- -
-
-
-
- Choose one! - - - - - - - - - - -
-
- Edit Names -
- - \ No newline at end of file diff --git a/.svn/pristine/27/27a9c0cb0d108f03117c369da9a9cd0abaa3bffb.svn-base b/.svn/pristine/27/27a9c0cb0d108f03117c369da9a9cd0abaa3bffb.svn-base deleted file mode 100644 index 2c9c5d8..0000000 --- a/.svn/pristine/27/27a9c0cb0d108f03117c369da9a9cd0abaa3bffb.svn-base +++ /dev/null @@ -1,46 +0,0 @@ -
-
-

Alexa

- -
-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
diff --git a/.svn/pristine/2e/2edfb2ffe3b5121f42113008cff449023db52f27.svn-base b/.svn/pristine/2e/2edfb2ffe3b5121f42113008cff449023db52f27.svn-base deleted file mode 100644 index 57f5624e7bce9ace2e91c342025a91eae38fbbf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6242 zcmbuDcT`m8y2hvNzGn{%0}e%L8o@#kjG$mbv7j+1R-%alDgvTGQ7J+gm|+-T=mH`* zFfjC9q)3~giu7I-MIeZPEyid($?=YQ?n=(RS@(}~_y2pZ^?TmudA|4CJ9q6c-Rx*U zG9bNTkmQe|qN0wDjEQtS$F#H!?7!lI8Df|3*WoBnD~ShmU>uEQ$91MaQm1s_EHtwQr8;Ii2`6 zBF81cwYD%}ZR3kC9?ph6=R8q?0PZ7)r7zcW(;vBP@kz7O?swRdjJddD#`+NM6&l2|ju*rl1M$}A zbrUEV=ZK7gGy|ff67v z2D~U*XA`r116%6GFsr~?NE?&61RQU}AW zPeg|3B5@H3CO{mTVg_LnPO#YIYGzuF37Ux|%f-av%MFS%v#Zymx6!(Ky+*9Ds`+|j zdxt*UY16IuO(TLd4X6U0BW2^Ny(3q~%A?inr(xKoUZ4$4EG>F&FptNP&o+?M?=xN=C);-C>6 z-p4<=;G&1G@5_m1?`Rxy)fu)_Rk5C4ruL&l2g`U%VdUXlM({d=ErWv?0z(k|{eewi zGmlvXU_WR>bjT!J2gWf^95(mxzahr1iS$C%;dJa~rWufTvd|35i!L+H6_-|-ASjBV z1$D-aZIvzS+Zyk5=ye|HG3rFR2eccI3CXA)e!~lyfC}-;N7g4zZ7>*^w0^_U95itu`;DpYS0Pe$Q_ zuqOuKbQtZK{;^O9oc%=|40{W{n(uBR&87xYsQ15N_J4jNkV0c79AgJrG;nD;C`>xv z1cx)W>kbKM> zKIlNt{z9)oh`w4moU*NW)9Zt}l>gAEa%E)>pOjq#hws~Qa>C)GQ90}#;vtVu%8K8u zrSDZ8lPhbJUw^`@`H@S@A*Ewiyf74oK@djH9rXM0;wEj|V6P*(AQtI|pOTj=gt|%~ z1Nf?+A97L0C8H!@J(No@MH;$rNk*0l?8m^&iZc+{e7`vfM0$G4jH^v8d+&6Ph4%=? z#zR8-CygJ53{D$8gmyhP3t3oPGI_o*_wv$0=<8pL-hu%2AKxk1%odXZIbZ#(s6|q6 zWGGTGwuYev$!ebh-Kaor*)|30c9s3JWBtdq6t(qH1%aa8Jqw#TgQrX=~zqUE;{u8BL)GmMqIo?T98H z3}dablD1znIx~O=8qMwAqU%v~O5cUI_vUIo7$)AxO32!L-6FWZV#n9~!{KUOHx6nZ zF@E0gE;{Cu#Gej-hy;i!Phn{)0l_}L&^nAM6B_4HODlnnIyAx3sn;-zE2TCzCq|GW$oyC+^*!d_YqC zGmL-o41eU=RhY@zvVBz~FmQ7s>$5hS6{>kXShJRRZTzmNtc~g?`!B{TTt8l*#3I7u zb&ZnVYT$fs?p%fCD%#Ua?=sn}$u^zU9YtElz z{q_GK)z^=Y(Lbc8va|B$z4Xu0*s=D`BDZ?2LQHD&dB!GXYsbEqz8mQ4s~y&bX*W5B zZCinlQLP+LdZ%hPUkfvxT>}<*)tfFWJDEdpT#8gfJ4l@-z50;X@qILaZ+|A>QjiZd zn9mQ>Msa!q9f+hQ)2Oj7i3u=Ol9{TFiP6lgY!)KMDCHGJ95G%&rjRR@ATgcX+|t05 zit9BNVb zZiZLIGmQ@EQGkTYH`DWMHt<{GyXW)P75szp@=@=NA+$>RWZTx%&`MR6RITfdzP~Nc z8RRZ>Y_&xl7KXpxu(Eo4a3YCNzmrZ)lv(TndFHhiV|KHb0_~_gZyNPSWjOE>LZSo* zhiaoj9H1m6Q7LiCU;;$WxFOQUgh)m{IZGMA>17zRpeUfM3|B6!VnQ`#4Z2cU^95OL zd$FvdlT})S_9{Vy?8*=cAEl3aG{D5n%;3=U?2KJ6!gvxnL4uwUi7%N?>5Ff^d}H>% za5d$TyeG%C+yJ@y@A*T^f;|>M1O z01FDj5GFY?M8HDM;h0mbt2>?oC0#;OQX*0f;Piw{11Ja2b1f{^DoCLhl_?j{Ypbf2 zklI?TfrZKFXbTf;r~BM(YrkFwcXzZv-Sqv{FhR6S$^iPqIRYQd!yixGZ(z*PMR!Tq zOZ@rWI}0s;e2VO+mj4u4EjjO~oR_RWH-9egz0^Z>mY?$2jw8}KZts(3lw>6xoyE|c@Y{| zWbgNia}ncS=5P=m*MYAEhGLM=!=H!5ZiYkA#B~sk;i)MR;>-+9FjJhpLX=ma4Ci4b zthCI8TO^Q9#~Wg9WA*iTcsATpUsD3ztv^uE(c6^)VMK3RHi{Dud;3$y9*#f6r&AEd zPmiBuKMlA|8b_ZOfN;C=UuKKS>vp-ka7ncC7ajVLeyhv(Iq#zkg-4t<^l~VHHpkU` z&20*IyDuKKHy;(yD6~6IZ0ZM#6Kwp#S~-_YekLV;4tp=oKN z%&Y`)YOW|<05a&2{(6>7dbv`*H%>H`)yP5`TWi{dfmkb1P3Q8vx|2H7+|K_khrDL> zgW25ZChU(i7ELAL0{;U0I6LyEZzVgsZ)^IUR{vf%M8$SnlZ$g6)hSeAdWYou=k4x9 z2<^}pj`h>{y%w1nO_w>(i~D_pL3TmKchdFIlm^*u*L{mir}~V&wF3oQk8%B#ieuE_ zldZnl$HHXcHZINa)J-xlgB)yR=IDK3)}7~n@%mckRVIk?0s=|gU^FB&I0OpD!UN%0 z4C4eMiHW{f!IZ=^S5Pr_-Z5S*`T@dl@#P<2{8kBGpbX#{%4wCA*_sT3z!5vQWV-Yg zR<;~!9i$JB3`=|UT82hPWqr%R!N~_*?K#uvEHQ_pkBknZx5l3D*Z*74F*&F!Y&F#V zTetOC#PDh!Z9}vqR0WV-(cI1AYxf@BDyhC7d1Uis5VSnT7*-=XR)s`!t+0V_WMLK> zWyxo%!hyY&Gd$Uz&BFSnP;v5n+p1T*FE2psUw!=pd{I9y5Dg9Xhr+_WkVrTr5$Ggu&_h``Tk2=MZoN-(3Un!qma`X0l(8q#Z- z0KN4CX!p3d?;>73IyK&f-e&>m!>O@xIKK{E80mKV`WV_Z)($=UYYq{44p)54;fFOL zzut6EdaEi$%WtIu;gS?gxsj*5OrU3pd+cFcv71d$={@t7tZz=~w=mU7gt&404cWxl z9Lu8GiP2X0rZ)aN#d&MheHOK&=S(ODsfly}??J=X`8Q{M0{q-9KvaOB`i^4tpuhL)vfX?>R}fQ zZzu^@hMHT4B1gI#`s(nZ$2>tbRCBKFtn!@UVSx1&~}4S%NsIeH`omY}fHm zq>J6P?=2KKBGcF#`moDqMeb+on;be1k?yr{4y?V$v3P6e&9jo7q2Y0Nos>vlu+al< zGPiDKHN+kD(9^7&yI8qzNA+p}VCC#l+evS4mPIdLf&&OH_smLw10UgWF+CWGL124S zNO;OgWB4GCF6L{1XbNJ_M7Uyck{X1Tm1mFuoG27yPRl@~ygWx4#BYo7i(#i=6zj#B za$DNk@zJrqURiwuHZs;R(T_E&0Z8Ga@d@9j?f&8 zj*7h&Z;l|>&En{I3PU7HGEbLqVHC|yjX#K^{4GfFZBa@^!(r*|+VX~j()OlIM(d$= ztO>fC)!5TJuoab6266uurteP}2ffHst`st7UAsQuk!BjzTyYY|gfnKy{yi4%ziXJ< zarD@Dq|N@pC%>!4iF4x|+}Vl}vZMJkA9Y!OnuT7q^5eFk*`j3%FZq_+4B!57&c{{lxZt1(K#`GGNuZC(3a_Zh5GHZ~$HUb?I71S{1TeZNAI(zsl1QK%N??8!F26DT z7>P7CmIBKvtFiWW^zL0LlF`ftv8p?FI=f_js$TiSBclj3p$;Msu+h8lOacVo?dSoQ z{+h%;C-$!-e(>i}iZ6dgYbNV@l&9o~V-M=CUH;p|&=%u5w7K8Kbek-+)O+`CO6$CV za?a6=)+cw=6yOp%t6=f9LCKwK4pQf}CD^gr2&oaCOSarQwruGOT^iu;PbJB>HeBem zf(8PyJSHei#E+^0;LV#r2s89L7O4tAkSK-)U=j@V-T=Y5RUl0nEEZyorMaS8aBF4N zZIwD)Dn)xyWT34L0#re?tGl#s02vxl2jKgCy$^>+m(TV*?w^|0O@RmIrwUa6Es6i_ z%?|~eU;lPvSMA1#a-Z3QhLNv?nTe7o6IZ~LP3>L!PV-t@_Gk~m>x0u-$9;3}3U~B31K+m!lhY7sr?ocK@L=;Z zVEMm!7nTR{!xGylUv%j8rjOH8{yBBh&{kCxcPIf^D9XCJX;CMjd$5nVc(!(macxjJ zBxzbPwA?VYFNe25ygOT1@H(&ic>aUtHH#Y;ypu!oV`CY zoQ(Wqv#n`DvcI@jY49d%T7jM6`&9R!NRn7idu3N zirj|lAgH7iNE2%z$;{h%^$pT8s!2y(rxa}Ys&=5Ev1t!90CzQAzWi?k{BT$Pu)Gb* z2iR%3aq(uv#h&Jf?_xN5xwarTXm45U`mwssu3O&(aPeT<1NLuyBZD2QcWGQ@XSKa> z*N}9dVI6bS@Vwt8TRg_sNBK9%U+z^o+crWM7#Cd%olL2kdFA2m<-$EI`qK^8i0N*>4SbWs(?0ZfcMVbwA5N5E#&)R262Lm6pkWVgR%zDve65 zt}#QB%gW&fP%3L{zf;`V-3#682L{`!*QnI@HZ)E)Pi;~8X|8|1%^m>ny`EpANHY5` DX3o&U diff --git a/.svn/pristine/33/3348d145d5befc29b84246eb1e781fcfe3091031.svn-base b/.svn/pristine/33/3348d145d5befc29b84246eb1e781fcfe3091031.svn-base deleted file mode 100644 index 0f74d67..0000000 --- a/.svn/pristine/33/3348d145d5befc29b84246eb1e781fcfe3091031.svn-base +++ /dev/null @@ -1,256 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(express.static('web')); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"7": { "url" : "alexa.html", "title" : "Alexa" }}, - {"4": { "url" : "presets.html", "title" : "Presets" }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendAlexa = function(conn) { - var json = '{"type":"sv.init.alexa","value":'; - json += JSON.stringify(state[7]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200 - }, - "3": { - 'show_date': 1, - 'out_effect': 2, - 'in_effect': 3, - 'display': true, - 'test': 60, - 'reset_time': 2500, - 'set_time': 200, - 'hv': true - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - }, - "7": { - 'date_name' : 'date', - 'backlight_name' : 'backlight', - 'clock_name' : 'clock', - 'test_name' : 'test', - 'cycling_name' : 'hue cycling', - 'twelve_hour_name' : '12 hour', - 'zero_name' : 'leading zero' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 7: - sendAlexa(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/34/343318d8bcf2e049b9a3de5b01dd910b9cddbba9.svn-base b/.svn/pristine/34/343318d8bcf2e049b9a3de5b01dd910b9cddbba9.svn-base deleted file mode 100644 index 7d94a80..0000000 --- a/.svn/pristine/34/343318d8bcf2e049b9a3de5b01dd910b9cddbba9.svn-base +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/.svn/pristine/36/3695324deebf1e43e68fbefd80b0dfb83b9494e5.svn-base b/.svn/pristine/36/3695324deebf1e43e68fbefd80b0dfb83b9494e5.svn-base deleted file mode 100644 index 5ad07cd..0000000 --- a/.svn/pristine/36/3695324deebf1e43e68fbefd80b0dfb83b9494e5.svn-base +++ /dev/null @@ -1,165 +0,0 @@ - - - ITS1A - - - - - - io.sloeber.core.inoToCpp - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - io.sloeber.arduinonature - - - - core/core - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266 - - - core/variant - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/variants/generic - - - libraries/Adafruit_LIS3DH - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_LIS3DH - - - libraries/Adafruit_MCP23017_Arduino_Library - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_MCP23017_Arduino_Library - - - libraries/Adafruit_NeoPixel - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_NeoPixel - - - libraries/Adafruit_Unified_Sensor - 2 - ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_Unified_Sensor/1.0.2 - - - libraries/ArduinoJson - 2 - C:/Users/mpand/Documents/Arduino/libraries/ArduinoJson - - - libraries/ArduinoOTA - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ArduinoOTA - - - libraries/Configs - 2 - C:/Users/mpand/Documents/Arduino/libraries/Configs - - - libraries/DNSServer - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/DNSServer - - - libraries/EEPROM - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/EEPROM - - - libraries/ESP8266WiFi - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi - - - libraries/ESP8266mDNS - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266mDNS - - - libraries/ESPAsyncHttpClient - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncHttpClient - - - libraries/ESPAsyncTCP - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncTCP - - - libraries/ESPAsyncWebServer - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncWebServer - - - libraries/ESPAsyncWiFiManager - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncWiFiManager - - - libraries/Hash - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/Hash - - - libraries/NixieDriver - 2 - C:/Users/mpand/Documents/Arduino/libraries/NixieDriver - - - libraries/NixieMisc - 2 - C:/Users/mpand/Documents/Arduino/libraries/NixieMisc - - - libraries/OneNixieClock - 2 - C:/Users/mpand/Documents/Arduino/libraries/OneNixieClock - - - libraries/SPI - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI - - - libraries/Time - 2 - C:/Users/mpand/Documents/Arduino/libraries/Time - - - libraries/U8g2 - 2 - C:/Users/mpand/Documents/Arduino/libraries/U8g2 - - - libraries/UPS - 2 - C:/Users/mpand/Documents/Arduino/libraries/UPS - - - libraries/Wire - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/Wire - - - diff --git a/.svn/pristine/36/36bc135d570dc27c7d2fe9b1c4cfe978f36e1224.svn-base b/.svn/pristine/36/36bc135d570dc27c7d2fe9b1c4cfe978f36e1224.svn-base deleted file mode 100644 index eca25fa..0000000 --- a/.svn/pristine/36/36bc135d570dc27c7d2fe9b1c4cfe978f36e1224.svn-base +++ /dev/null @@ -1,50 +0,0 @@ -
-
-

LEDs

- - -
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- - -
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
diff --git a/.svn/pristine/37/37e171e28f5ebd955428742069f198af910f6a3d.svn-base b/.svn/pristine/37/37e171e28f5ebd955428742069f198af910f6a3d.svn-base deleted file mode 100644 index a343d06..0000000 --- a/.svn/pristine/37/37e171e28f5ebd955428742069f198af910f6a3d.svn-base +++ /dev/null @@ -1,540 +0,0 @@ -eclipse.preferences.version=1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/value=arduino.ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/value=ESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/value=ESP8266_WEMOS_D1MINI -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/value=${A.RUNTIME.PLATFORM.PATH}/cores/${A.BUILD.CORE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/value=-DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/value=40 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/value=eagle.flash.4m1m.ld -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/value=dio -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/value=4M -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/value=80000000L -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/value=-DLWIP_OPEN_SRC -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/value=-llwip_gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/value=${ProjName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/value=8192 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/value=0x3FB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/value=256 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/value=0x300000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\variants\\d1_mini -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/value=d1_mini -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/value=xtensa-lx106-elf-ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/value=cru -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/value=xtensa-lx106-elf-as -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/value=-g ${A.COMPILER.WARNING_FLAGS} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" "-T${A.BUILD.FLASH_LD}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/value=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 ${A.BUILD.LWIP_LIB} -lstdc++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -MMD -std\=gnu99 -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/value=xtensa-lx106-elf-g++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -MMD -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/value=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I${A.COMPILER.SDK.PATH}/include" "-I${A.COMPILER.SDK.PATH}/lwip/include" "-I${A.BUILD.PATH}/core" -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH}/bin/ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp -MMD -mlongcalls -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/value=xtensa-lx106-elf-size -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Wextra -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/value=-w -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL} -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/value=3600 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/value=1528291486 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/value=1528305886 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/value=-18000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/value=${JANTJE.BOARDS_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/value=esp8266 network upload -environment/project/io.sloeber.core.toolChain.release.34549407/A.NETWORK.PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.NETWORK.PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.NETWORK.PORT/value=8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages -environment/project/io.sloeber.core.toolChain.release.34549407/A.PROGRAM.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.PROGRAM.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.PROGRAM.TOOL/value=esp8266OTA -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-ar" cru "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/arduino.ar" "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lib" "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/ld" "-Teagle.flash.4m1m.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -Wl,--start-group -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-LC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -Wl,--start-group ${A.OBJECT_FILES} "${A.BUILD.PATH}/arduino.ar" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group "-L${A.BUILD.PATH}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -std\=gnu99 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_WEMOS_D1MINI -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_WEMOS_D1MINI\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_WEMOS_D1MINI -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_WEMOS_D1MINI\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13/esptool.exe" -eo "C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/bootloaders/eboot/eboot.elf" -bo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.bin" -bm dio -bf 40 -bz 4M -bs .text -bp 4096 -ec -eo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.RUNTIME.TOOLS.ESPTOOL.PATH}/${A.COMPILER.ESPTOOL.CMD}" -eo "${A.RUNTIME.PLATFORM.PATH}/bootloaders/eboot/eboot.elf" -bo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -bm ${A.BUILD.FLASH_MODE} -bf ${A.BUILD.FLASH_FREQ} -bz ${A.BUILD.FLASH_SIZE} -bs .text -bp 4096 -ec -eo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -g -x assembler-with-cpp -mlongcalls -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_WEMOS_D1MINI -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_WEMOS_D1MINI\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-size" -A "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.data|\\.rodata|\\.bss)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/value=^(?\:\\.irom0\\.text|\\.text|\\.data|\\.rodata|)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/value=10802 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/value=${JANTJE.COM_PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/value=ARDUINO -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.PROGRAM.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.PROGRAM.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.PROGRAM.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESPTOOL.NETWORK_CMD} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/value=python.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/value=${A.RUNTIME.TOOLS.ESPTOOL.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/value="${A.TOOLS.ESPTOOL.NETWORK_CMD}" "${A.RUNTIME.PLATFORM.PATH}/tools/espota.py" -i "${A.SERIAL.PORT}" -p "${A.NETWORK.PORT}" "--auth\=${A.TOOLS.ESPTOOL.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/value=-vv -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL.PATH}/${A.TOOLS.ESPTOOL.CMD}" ${A.TOOLS.ESPTOOL.UPLOAD.VERBOSE} -cd ${A.UPLOAD.RESETMETHOD} -cb ${A.UPLOAD.SPEED} -cp "${A.SERIAL.PORT}" -ca 0x00000 -cf "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/value=esp -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/value=mkspiffs.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/value=${A.RUNTIME.TOOLS.MKSPIFFS.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/value=81920 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/value=1044464 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/value=stk500v1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/value=nodemcu -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/value=921600 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/value=2.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\boards.txt -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/value=d1_mini -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/value=WeMos D1 R2 & mini -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/value=192.168.1.203 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/value=C\:\\Users\\mpand\\eclipse\\ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/value=${eclipse_home}/arduinoPlugin/tools/make/ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/value=CpuFrequency\=80\nFlashSize\=4M1M\nUploadSpeed\=921600 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.HEX.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/value=win32 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/value=ITS1A -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/value=esp8266 network upload -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/value=C\:\\Users\\mpand\\eclipse-workspace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${SystemRoot}\\system32${PathDelimiter}${SystemRoot}${PathDelimiter}${SystemRoot}\\system32\\Wbem${PathDelimiter}${sloeber_path_extension} -environment/project/io.sloeber.core.toolChain.release.34549407/append=true -environment/project/io.sloeber.core.toolChain.release.34549407/appendContributed=true diff --git a/.svn/pristine/3a/3a91f13cef93e86b359dec164cd7d9852e8fb1c0.svn-base b/.svn/pristine/3a/3a91f13cef93e86b359dec164cd7d9852e8fb1c0.svn-base deleted file mode 100644 index a2d39e2..0000000 --- a/.svn/pristine/3a/3a91f13cef93e86b359dec164cd7d9852e8fb1c0.svn-base +++ /dev/null @@ -1,814 +0,0 @@ -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } -#define ALEXA -//#define OTA - -#include "Arduino.h" -#include -#include -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#ifdef ALEXA -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); -#ifdef ALEXA -fauxmoESP fauxmo; -#endif -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Manual"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -// Alexa config values -StringConfigItem date_name("date_name", 20, String("date")); -StringConfigItem backlight_name("backlight_name", 20, String("backlight")); -StringConfigItem clock_name("clock_name", 20, String("clock")); -StringConfigItem test_name("test_name", 20, String("test")); -StringConfigItem cycling_name("cycling_name", 20, String("hue cycling")); -StringConfigItem twelve_hour_name("twelve_hour_name", 20, String("12 hour")); -StringConfigItem zero_name("zero_name", 20, String("leading zero")); - -BaseConfigItem *alexaSet[] = { - // Alexa - &date_name, - &backlight_name, - &clock_name, - &test_name, - &cycling_name, - &twelve_hour_name, - &zero_name, - 0 -}; - -CompositeConfigItem alexaConfig("alexa", 0, alexaSet); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - &alexaConfig, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *out_effect = &ConfigSet1::out_effect; - ByteConfigItem *in_effect = &ConfigSet1::in_effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - BooleanConfigItem *hv = &ConfigSet1::hv; - - // Alexa config values - StringConfigItem *date_name = &::date_name; - StringConfigItem *backlight_name = &::backlight_name; - StringConfigItem *clock_name = &::clock_name; - StringConfigItem *test_name = &::test_name; - StringConfigItem *cycling_name = &::cycling_name; - StringConfigItem *twelve_hour_name = &::twelve_hour_name; - StringConfigItem *zero_name = &::zero_name; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - out_effect = static_cast(config->get("out_effect")); - in_effect = static_cast(config->get("in_effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - hv = static_cast(config->get("hv")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setHV(*CurrentConfig::hv); - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setOutEffect(*CurrentConfig::out_effect); - clock.setInEffect(*CurrentConfig::in_effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void setTimeFromWifiManager() { - static String oldWifiTime = ""; - - const String &wifiTime = wifiManager.getWifiTime(); - if (wifiTime != oldWifiTime) { - DEBUG(String("Setting time from wifi manager") + wifiTime); - int intValues[6]; - grabInts(wifiTime, &intValues[0], ","); - - timeInitialized = true; - oldWifiTime = wifiTime; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); - } -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { -#ifdef OTA - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -#endif //OTA -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSGlobalConfigHandler wsAlexaHandler(rootConfig, "alexa"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -String *items[] = { - &WSMenuHandler::clockMenu, - &WSMenuHandler::ledsMenu, - &WSMenuHandler::extraMenu, - &WSMenuHandler::alexaMenu, - &WSMenuHandler::presetsMenu, - &WSMenuHandler::infoMenu, - &WSMenuHandler::presetNamesMenu, - 0 -}; - -WSMenuHandler wsMenuHandler(items); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsAlexaHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else if (screen == 7) { // Alexa switch names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { -#ifdef ALEXA - StringConfigItem *sItem = static_cast(item); - int deviceId = fauxmo.getDeviceId(sItem->value.c_str()); - if (deviceId > 0) { - fauxmo.renameDevice(deviceId, value.c_str()); - } - item->fromString(value); - item->put(); - broadcastUpdate(*item); -#endif - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void startFauxMo() { - fauxmo.enable(true); - fauxmo.addDevice(CurrentConfig::date_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::backlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::clock_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::test_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::cycling_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::twelve_hour_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::zero_name->value.c_str()); - - fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state) { - BooleanConfigItem *item = 0; - switch (device_id) { - case 0: - item = &(*CurrentConfig::time_or_date = !state); - break; - case 1: - item = &(*CurrentConfig::backlight = state); - break; - case 2: - item = &(*CurrentConfig::hv = state); - break; - case 3: - item = &(*CurrentConfig::display = !state); - break; - case 4: - item = &(*CurrentConfig::hue_cycling = state); - break; - case 5: - item = &(*CurrentConfig::hour_format = state); - break; - case 6: - item = &(*CurrentConfig::leading_zero = state); - break; - } - - if (item != 0) { - item->put(); - } - broadcastUpdate(*item); - }); - fauxmo.onGetState([](unsigned char device_id, const char * device_name) { - bool ret = false; - switch (device_id) { - case 0: - ret = *CurrentConfig::time_or_date; - ret = !ret; - break; - case 1: - ret = *CurrentConfig::backlight; - break; - case 2: - ret = *CurrentConfig::hv; - break; - case 3: - ret = *CurrentConfig::display; - ret = !ret; - break; - case 4: - ret = *CurrentConfig::hue_cycling; - break; - case 5: - ret = *CurrentConfig::hour_format; - break; - case 6: - ret = *CurrentConfig::leading_zero; - break; - } - - return ret; - }); -} - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); - - startFauxMo(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(true); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ -#ifdef OTA - ArduinoOTA.handle(); -#endif - wifiManager.loop(); - setTimeFromWifiManager(); -#ifdef ALEXA - fauxmo.handle(); -#endif - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/3a/3af3234db2fe3a5916008e48a565a6a32a3c32f0.svn-base b/.svn/pristine/3a/3af3234db2fe3a5916008e48a565a6a32a3c32f0.svn-base deleted file mode 100644 index 8c7d7db..0000000 --- a/.svn/pristine/3a/3af3234db2fe3a5916008e48a565a6a32a3c32f0.svn-base +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - STC - - - - - - - - - - - - - - - - - - - - -
-
-

nixies.us - STC

-
- -
- - \ No newline at end of file diff --git a/.svn/pristine/3e/3e3cd767f28fde9604491af9d27bfadf6c3f3e2f.svn-base b/.svn/pristine/3e/3e3cd767f28fde9604491af9d27bfadf6c3f3e2f.svn-base deleted file mode 100644 index 0a3be7a..0000000 --- a/.svn/pristine/3e/3e3cd767f28fde9604491af9d27bfadf6c3f3e2f.svn-base +++ /dev/null @@ -1,22 +0,0 @@ -Exception (28): -epc1=0x40203acb epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000 - -ctx: cont -sp: 3fff0ec0 end: 3fff10b0 offset: 01a0 - ->>>stack>>> -3fff1060: 00000000 00000000 3ffefbac 40203ac8 -3fff1070: 3fffdad0 3ffeffc8 3ffefbac 40202342 -3fff1080: feefeffe feefeffe feefeffe feefeffe -3fff1090: feefeffe 00000000 3fff007d 4020dc60 -3fff10a0: feefeffe feefeffe 3fff0090 40100718 -<< { - console.log(`stdout: ${data}`); - }); - - proc.stderr.on('data', (data) => { - console.log(`stderr: ${data}`); - }); - - proc.on('exit', function (code) { - cb(); - }); -}); - -gulp.task('mkspiffs', ['buildfs_inline', 'load_properties'], function(cb) { - var args = [ - "-d", - "5", - "-c", - props["project_loc"] + "/" + web_dist, - "-p", - props["A.BUILD.SPIFFS_PAGESIZE"], - "-b", - props["A.BUILD.SPIFFS_BLOCKSIZE"], - "-s", - props["A.BUILD.SPIFFS_SIZE"], - spiffs_file - ]; - - var cmd = props["A.TOOLS.MKSPIFFS.PATH"] + "/" + props["A.TOOLS.MKSPIFFS.CMD"]; - log("Spawning task: ", cmd); - var proc = spawn(cmd, args); - - proc.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - - proc.stderr.on('data', (data) => { - console.log(`stderr: ${data}`); - }); - - proc.on('exit', function (code) { - cb(); - }); -}); - -/* Clean destination folder */ -gulp.task('clean', function() { - return del([web_dist + '/*']); -}); - -/* Copy static files */ -gulp.task('files', function() { - return gulp.src([ - web_src + '/**/*.{jpg,jpeg,png,ico,gif}', - web_src + '/fsversion' - ]) - .pipe(gulp.dest(web_dist)); -}); - -/* Process HTML, CSS, JS --- INLINE --- */ -gulp.task('inline', function() { - return gulp.src(web_src + '/*.html') - .pipe(inline({ - base: web_src, - js: uglify, - css: cleancss, - disabledTypes: ['svg', 'img'] - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest(web_dist)); -}) - -gulp.task('buildfs_inline', ['clean'], function() { - return gulp.src(web_src + '/*.html') - .pipe(inline({ - base: web_src, - js: uglify, - css: [cleancss], - disabledTypes: ['svg', 'img'] - })) - .pipe(inlineImages({ - webRoot: web_src - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest(web_dist)); -}); - -/* Process HTML, CSS, JS */ -gulp.task('html', function() { - return gulp.src(web_src + '/*.html') - .pipe(useref()) - .pipe(plumber()) - .pipe(gulpif('*.css', cleancss())) - .pipe(gulpif('*.js', uglify())) - .pipe(gulpif('*.html', htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - }))) - .pipe(gzip()) - .pipe(gulp.dest(web_dist)); -}); - -/* Build file system */ -gulp.task('buildfs', ['clean', 'files', 'html']); -gulp.task('buildfs2', ['clean', 'files', 'inline']); -gulp.task('default', ['clean', 'buildfs_inline']); - \ No newline at end of file diff --git a/.svn/pristine/42/423cd571d1cf4ce7ab00f1af5ce421adf9eb781e.svn-base b/.svn/pristine/42/423cd571d1cf4ce7ab00f1af5ce421adf9eb781e.svn-base deleted file mode 100644 index 40cc8b4..0000000 --- a/.svn/pristine/42/423cd571d1cf4ce7ab00f1af5ce421adf9eb781e.svn-base +++ /dev/null @@ -1,76 +0,0 @@ -
-
-

Extra

- - -
-
-
-
- - -
-
- -
-
- -
-
-
- -
-
- -
-
-
-
-
- -
-
- -
-
- - -
-
- - - - -
-
-
- -
-
- -
-
-
-
diff --git a/.svn/pristine/44/44e96bb2359ffbafdb07fe8d60e7f95775e6d5ec.svn-base b/.svn/pristine/44/44e96bb2359ffbafdb07fe8d60e7f95775e6d5ec.svn-base deleted file mode 100644 index c39fba5..0000000 --- a/.svn/pristine/44/44e96bb2359ffbafdb07fe8d60e7f95775e6d5ec.svn-base +++ /dev/null @@ -1,2 +0,0 @@ -/*! roundSlider v1.3 | (c) 2015-2016, Soundar | MIT license | http://roundsliderui.com/licence.html */ -;(function($,window,undefined){"use strict";function $proxy(n,t){return typeof $.proxy=="function"?$.proxy(n,t):function(i){n.call(t,i)}}function $data(n,t,i){return typeof $.data=="function"?$.data(n,t,i):i?void 0:$(n).hasClass("rs-control")}function $isPlainObject(n){if(typeof $.isPlainObject=="function")return $.isPlainObject(n);var t=JSON.stringify(n);return typeof n=="object"&&n.length===undefined&&t.length>2&&t.substr(0,1)==="{"&&t.substr(t.length-1)==="}"}function isNumber(n){return n=parseFloat(n),typeof n=="number"&&!isNaN(n)}function createElement(n){var t=n.split(".");return $(document.createElement(t[0])).addClass(t[1]||"")}function getdistance(n,t){return Math.sqrt((n.x-t.x)*(n.x-t.x)+(n.y-t.y)*(n.y-t.y))}function setTransform(n,t){return n.css("-webkit-transform","rotate("+t+"deg)"),n.css("-moz-transform","rotate("+t+"deg)"),n.css("-ms-transform","rotate("+t+"deg)"),n.css("-o-transform","rotate("+t+"deg)"),n.css("transform","rotate("+t+"deg)"),n}function RoundSlider(n,t){n.id&&(window[n.id]=this),this.control=$(n),this.options=$.extend({},this.defaults,t),this._raise("beforeCreate")!==!1?(this._init(),this._raise("create")):this._removeData()}function CreateRoundSlider(n,t){for(var i,r,u=0;u=c&&s<=h&&(n.preventDefault(),r=this.control.find(".rs-handle.rs-focus"),this.control.attr("tabindex","0").focus().removeAttr("tabindex"),i.hasClass("rs-seperator")?(t=i.parent().hasClass("rs-start")?this.options.min:this.options.max,u=this._valueToAngle(t)):(f=this._getAngleValue(e,o),u=f.angle,t=f.value),this._rangeSlider&&(r=this.control.find(".rs-handle.rs-focus"),this._active=r.length==1?parseFloat(r.attr("index")):this._handle2.value-t=35&&t<=40)&&(t>=37&&t<=40&&this._removeAnimation(),r=this["_handle"+this._active],n.preventDefault(),t==38||t==37?i=this._round(this._limitValue(r.value+this.options.step)):t==39||t==40?i=this._round(this._limitValue(r.value-this._getMinusStep(r.value))):t==36?i=this._getKeyValue("Home"):t==35&&(i=this._getKeyValue("End")),u=this._valueToAngle(i),this._changeSliderValue(i,u),this._raiseEvent("change"))},_handleKeyUp:function(){this._addAnimation()},_getMinusStep:function(n){if(n==this.options.max){var t=(this.options.max-this.options.min)%this.options.step;return t==0?this.options.step:t}return this.options.step},_getKeyValue:function(n){return this._rangeSlider?n=="Home"?this._active==1?this.options.min:this._handle1.value:this._active==1?this._handle2.value:this.options.max:n=="Home"?this.options.min:this.options.max},_elementScroll:function(n){if(!this._isReadOnly){n.preventDefault();var i=n.originalEvent||n,r,t,f,u;(u=i.wheelDelta?i.wheelDelta/60:i.detail?-i.detail/2:0,u!=0)&&(this._updateActiveHandle(n),r=this["_handle"+this._active],t=r.value+(u>0?this.options.step:-this._getMinusStep(r.value)),t=this._limitValue(t),f=this._valueToAngle(t),this._removeAnimation(),this._changeSliderValue(t,f),this._raiseEvent("change"),this._addAnimation())}},_updateActiveHandle:function(n){var t=$(n.target);t.hasClass("rs-handle")&&t.parent().parent()[0]==this.control[0]&&(this.bar=t.parent(),this._active=parseFloat(t.attr("index"))),this.bar.find(".rs-handle").hasClass("rs-focus")||this.bar.find(".rs-handle").focus()},_bindControlEvents:function(n){this[n](this.control,"mousedown",this._elementDown),this[n](this.control,"touchstart",this._elementDown)},_bindScrollEvents:function(n){this[n](this.control,"mousewheel",this._elementScroll),this[n](this.control,"DOMMouseScroll",this._elementScroll)},_bindMouseEvents:function(n){this[n]($(document),"mousemove",this._handleMove),this[n]($(document),"mouseup",this._handleUp),this[n]($(document),"mouseleave",this._handleUp),this[n]($(document),"touchmove",this._handleMove),this[n]($(document),"touchend",this._handleUp),this[n]($(document),"touchcancel",this._handleUp)},_bindKeyboardEvents:function(n){this[n]($(document),"keydown",this._handleKeyDown),this[n]($(document),"keyup",this._handleKeyUp)},_changeSliderValue:function(n,t){var u=this._oriAngle(t),i=this._limitAngle(t);if(this._rangeSlider||this._showRange){if(this._active==1&&u<=this._oriAngle(this._handle2.angle)||this._active==2&&u>=this._oriAngle(this._handle1.angle)||this._invertRange){this["_handle"+this._active]={angle:t,value:n},this.options.value=this._rangeSlider?this._handle1.value+","+this._handle2.value:n,this.bar.rsRotate(i),this._updateARIA(n);var r=this._oriAngle(this._handle2.angle)-this._oriAngle(this._handle1.angle),f="1",e="0";r<=180&&!(r<0&&r>-180)&&(f="0",e="1"),this.block2.css("opacity",f),this.block3.css("opacity",e),(this._active==1?this.block4:this.block2).rsRotate(i-180),(this._active==1?this.block1:this.block3).rsRotate(i)}}else this["_handle"+this._active]={angle:t,value:n},this.options.value=n,this.bar.rsRotate(i),this._updateARIA(n)},_updateARIA:function(n){var i=this.options.min,r=this.options.max,t;this.bar.children().attr({"aria-valuenow":n}),this.options.sliderType=="range"?(t=this._handles(),t.eq(0).attr({"aria-valuemin":i}),t.eq(1).attr({"aria-valuemax":r}),this._active==1?t.eq(1).attr({"aria-valuemin":n}):t.eq(0).attr({"aria-valuemax":n})):this.bar.children().attr({"aria-valuemin":i,"aria-valuemax":r})},_checkKO:function(){var f=this._dataElement().data("bind"),t,i,r,n,u;if(typeof f=="string"&&typeof ko=="object"){if(t=ko.dataFor(this._dataElement()[0]),typeof t=="undefined")return!0;for(i=f.split(","),n=0;nthis._end){if(!t)return i;n=this._start+(r<=this._end-r?0:this._end)}else if(t&&(u=this._handleDragDistance,isNumber(u)&&Math.abs(f-r)>u))return i;return n},_processStepByAngle:function(n){var t=this._angleToValue(n);return this._processStepByValue(t)},_processStepByValue:function(n){var r=this.options.step,e,t,u,f,i,o;return e=(n-this.options.min)%r,t=n-e,u=this._limitValue(t+r),f=this._limitValue(t-r),i=n>=t?n-tn-f?t:f,i=this._round(i),o=this._valueToAngle(i),{value:i,angle:o}},_round:function(n){var t=this.options.step.toString().split(".");return t[1]?parseFloat(n.toFixed(t[1].length)):Math.round(n)},_oriAngle:function(n){var t=n-this._start;return t<0&&(t+=360),t},_limitAngle:function(n){return n>360+this._start&&(n-=360),nthis.options.max&&(n=this.options.max),n},_angleToValue:function(n){var t=this.options;return this._oriAngle(n)/this._end*(t.max-t.min)+t.min},_valueToAngle:function(n){var t=this.options;return(n-t.min)/(t.max-t.min)*this._end+this._start},_appendHiddenField:function(){this._hiddenField=this._hiddenField||createElement("input"),this._hiddenField.attr({type:"hidden",name:this._dataElement()[0].id||""}),this.control.append(this._hiddenField),this._updateHidden()},_updateHidden:function(){var n=this.options.value;this._hiddenField.val(n),(this._isKO||this._isAngular)&&this._hiddenField.trigger("change"),this._isAngular&&(this._scope()[this._ngName]=n)},_updateTooltip:function(){this.tooltip&&!this.tooltip.hasClass("hover")&&this.tooltip.html(this._getTooltipValue()),this._updateTooltipPos()},_updateTooltipPos:function(){this.tooltip&&this.tooltip.css(this._getTooltipPos())},_getTooltipPos:function(){var n=this.options.circleShape,t;if(n=="full"||n=="pie"||n.indexOf("custom")===0)return{"margin-top":-this.tooltip.outerHeight()/2,"margin-left":-this.tooltip.outerWidth()/2};if(n.indexOf("half")!=-1){switch(n){case"half-top":case"half-bottom":t={"margin-left":-this.tooltip.outerWidth()/2};break;case"half-left":case"half-right":t={"margin-top":-this.tooltip.outerHeight()/2}}return t}return{}},_getTooltipValue:function(n){if(this._rangeSlider){var t=this.options.value.split(",");return n?t[0]+" - "+t[1]:this._tooltipValue(t[0],1)+" - "+this._tooltipValue(t[1],2)}return n?this.options.value:this._tooltipValue(this.options.value)},_tooltipValue:function(n,t){var i=this._raise("tooltipFormat",{value:n,handle:this._handleArgs(t)});return i!=null&&typeof i!="boolean"?i:n},_validateStartAngle:function(){var n=this.options.startAngle;return n=(isNumber(n)?parseFloat(n):0)%360,n<0&&(n+=360),this.options.startAngle=n,n},_validateEndAngle:function(){var end=this.options.endAngle;if(typeof end=="string"&&isNumber(end)&&(end.charAt(0)==="+"||end.charAt(0)==="-"))try{end=eval(this.options.startAngle+end.charAt(0)+Math.abs(parseFloat(end)))}catch(e){console.warn(e)}return end=(isNumber(end)?parseFloat(end):360)%360,end<=this.options.startAngle&&(end+=360),end},_refreshCircleShape:function(){var n=this.options.circleShape,i=["half-top","half-bottom","half-left","half-right","quarter-top-left","quarter-top-right","quarter-bottom-right","quarter-bottom-left","pie","custom-half","custom-quarter"],t;i.indexOf(n)==-1&&(t=["h1","h2","h3","h4","q1","q2","q3","q4","3/4","ch","cq"].indexOf(n),n=t!=-1?i[t]:n=="half"?"half-top":n=="quarter"?"quarter-top-left":"full"),this.options.circleShape=n},_appendOverlay:function(){var n=this.options.circleShape;n=="pie"?this._checkOverlay(".rs-overlay",270):(n=="custom-half"||n=="custom-quarter")&&(this._checkOverlay(".rs-overlay1",180),n=="custom-quarter"&&this._checkOverlay(".rs-overlay2",this._end))},_checkOverlay:function(n,t){var i=this.container.children(n);i.length==0&&(i=createElement("div"+n+" rs-transition rs-bg-color"),this.container.append(i)),i.rsRotate(this._start+t)},_checkDataType:function(){var i=this.options,r,n,t,u=this._props();for(r in u.numberType)n=u.numberType[r],t=i[n],i[n]=isNumber(t)?parseFloat(t):this.defaults[n];for(r in u.booleanType)n=u.booleanType[r],t=i[n],i[n]=t=="false"?!1:!!t;for(r in u.stringType)n=u.stringType[r],t=i[n],i[n]=(""+t).toLowerCase()},_validateSliderType:function(){var n=this.options.sliderType.toLowerCase();this._rangeSlider=this._showRange=!1,n=="range"?this._rangeSlider=this._showRange=!0:n.indexOf("min")!=-1?(this._showRange=!0,n="min-range"):n="default",this.options.sliderType=n},_updateStartEnd:function(){var n=this.options.circleShape;n!="full"&&(n.indexOf("quarter")!=-1?this.options.endAngle="+90":n.indexOf("half")!=-1?this.options.endAngle="+180":n=="pie"&&(this.options.endAngle="+270"),n=="quarter-top-left"||n=="half-top"?this.options.startAngle=0:n=="quarter-top-right"||n=="half-right"?this.options.startAngle=90:n=="quarter-bottom-right"||n=="half-bottom"?this.options.startAngle=180:(n=="quarter-bottom-left"||n=="half-left")&&(this.options.startAngle=270))},_validateStartEnd:function(){this._start=this._validateStartAngle(),this._end=this._validateEndAngle();var n=this._start=2?(isNumber(i[0])?i[0]:t)+","+(isNumber(i[1])?i[1]:f):isNumber(i[0])?t+","+i[0]:t+","+t:isNumber(n)?t+","+n:t+","+t:typeof n=="string"?(u=i.pop(),r=isNumber(u)?parseFloat(u):t):r=isNumber(n)?parseFloat(n):t,this.options.value=r},_validateModelValue:function(){var r=this.options.value,i;if(this._rangeSlider){var u=r.split(","),n=parseFloat(u[0]),t=parseFloat(u[1]);n=this._limitValue(n),t=this._limitValue(t),this._invertRange||n>t&&(t=n),this._handle1=this._processStepByValue(n),this._handle2=this._processStepByValue(t),this.options.value=this._handle1.value+","+this._handle2.value}else i=this._showRange?2:this._active||1,this["_handle"+i]=this._processStepByValue(this._limitValue(r)),this._showRange&&(this._handle1=this._handleDefaults()),this.options.value=this["_handle"+i].value},_isBrowserSupported:function(){for(var t=["borderRadius","WebkitBorderRadius","MozBorderRadius","OBorderRadius","msBorderRadius","KhtmlBorderRadius"],n=0;n=0||n.indexOf("Trident/")>=0)&&this.control.css({"-ms-touch-action":"none","touch-action":"none"})},_raise:function(n,t){var u=this.options,i=u[n],r=!0;return t=t||{value:u.value},t.options=u,i&&(t.type=n,typeof i=="string"&&(i=window[i]),$.isFunction(i)&&(r=i.call(this,t),r=r===!1?!1:r)),this.control.trigger($.Event?$.Event(n,t):n),r},_bind:function(n,t,i){$(n).bind(t,$proxy(i,this))},_unbind:function(n,t,i){$.proxy?$(n).unbind(t,$.proxy(i,this)):$(n).unbind(t)},_getInstance:function(){return $data(this._dataElement()[0],pluginName)},_removeData:function(){var n=this._dataElement()[0];$.removeData&&$.removeData(n,pluginName),n.id&&delete window[n.id]},_destroyControl:function(){this._isInputType&&this._dataElement().insertAfter(this.control).attr("type","text"),this.control.empty().removeClass("rs-control").height("").width(""),this._removeAnimation(),this._bindControlEvents("_unbind")},_updateWidth:function(){this.lastBlock.css("padding",this.options.width),this._refreshHandle()},_readOnly:function(n){this._isReadOnly=n,this.container.removeClass("rs-readonly"),n&&this.container.addClass("rs-readonly")},_get:function(n){return this.options[n]},_set:function(n,t){var i=this._props();if($.inArray(n,i.numberType)!=-1){if(!isNumber(t))return;t=parseFloat(t)}else $.inArray(n,i.booleanType)!=-1?t=t=="false"?!1:!!t:$.inArray(n,i.stringType)!=-1&&(t=t.toLowerCase());if(this.options[n]!=t){this.options[n]=t;switch(n){case"startAngle":case"endAngle":this._validateStartEnd(),this._updateSeperator(),this._appendOverlay();case"min":case"max":case"step":case"value":this._analyzeModelValue(),this._validateModelValue(),this._setValue(),this._updatePre(),this._updateHidden(),this._updateTooltip();break;case"radius":this._setRadius(),this._updateTooltipPos();break;case"width":this._removeAnimation(),this._updateWidth(),this._updateTooltipPos(),this._addAnimation(),this._refreshSeperator();break;case"handleSize":this._refreshHandle();break;case"handleShape":this._setHandleShape();break;case"animation":this._setAnimation();break;case"showTooltip":this.options.showTooltip?this._appendTooltip():this._removeTooltip();break;case"editableTooltip":this._tooltipEditable(),this._updateTooltipPos();break;case"disabled":this.options.disabled?this.disable():this.enable();break;case"readOnly":this.options.readOnly?this._readOnly(!0):!this.options.disabled&&this._readOnly(!1);break;case"mouseScrollAction":this._bindScrollEvents(this.options.mouseScrollAction?"_bind":"_unbind");break;case"lineCap":this._refreshSeperator();break;case"circleShape":this._refreshCircleShape(),this.options.circleShape=="full"&&(this.options.startAngle=0,this.options.endAngle="+360");case"sliderType":this._destroyControl(),this._onInit()}return this}},option:function(n,t){if(this._getInstance()&&this._isBrowserSupport){if($isPlainObject(n)){(n.min!==undefined||n.max!==undefined)&&(n.min!==undefined&&(this.options.min=n.min,delete n.min),n.max!==undefined&&(this.options.max=n.max,delete n.max),n.value==undefined&&this._set("value",this.options.value));for(var i in n)this._set(i,n[i])}else if(n&&typeof n=="string"){if(t===undefined)return this._get(n);this._set(n,t)}return this}},getValue:function(n){if(this.options.sliderType=="range"&&isNumber(n)){var t=parseFloat(n);if(t==1||t==2)return this["_handle"+t].value}return this._get("value")},setValue:function(n,t){if(isNumber(n)){if(isNumber(t))if(this.options.sliderType=="range"){var i=parseFloat(t),r=parseFloat(n);i==1?n=r+","+this._handle2.value:i==2&&(n=this._handle1.value+","+r)}else this.options.sliderType=="default"&&(this._active=t);this._set("value",n)}},disable:function(){this.options.disabled=!0,this.container.addClass("rs-disabled"),this._readOnly(!0)},enable:function(){this.options.disabled=!1,this.container.removeClass("rs-disabled"),this.options.readOnly||this._readOnly(!1)},destroy:function(){this._getInstance()&&(this._destroyControl(),this._removeData(),this._isInputType&&this.control.remove())}},$.fn.rsRotate=function(n){return setTransform(this,n)},typeof $.fn.outerHeight=="undefined"&&($.fn.outerHeight=function(){return this[0].offsetHeight},$.fn.outerWidth=function(){return this[0].offsetWidth}),typeof $.fn.hasClass=="undefined"&&($.fn.hasClass=function(n){return this[0].className.split(" ").indexOf(n)!==-1}),typeof $.fn.offset=="undefined"&&($.fn.offset=function(){return{left:this[0].offsetLeft,top:this[0].offsetTop}}),$.fn[pluginName].prototype=RoundSlider.prototype})(jQuery,window); \ No newline at end of file diff --git a/.svn/pristine/45/454e0f77b952d7dba6ee01f6b9da274f983a8004.svn-base b/.svn/pristine/45/454e0f77b952d7dba6ee01f6b9da274f983a8004.svn-base deleted file mode 100644 index 7822d3c..0000000 --- a/.svn/pristine/45/454e0f77b952d7dba6ee01f6b9da274f983a8004.svn-base +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(express.static('web')); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"4": { "url" : "presets.html", "title" : "Presets" }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200 - }, - "3": { - 'show_date': true, - 'display': true, - 'test': 60 - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/46/46bbadabd33c26beb7decb3ba16ff95662af5518.svn-base b/.svn/pristine/46/46bbadabd33c26beb7decb3ba16ff95662af5518.svn-base deleted file mode 100644 index d3285a6..0000000 --- a/.svn/pristine/46/46bbadabd33c26beb7decb3ba16ff95662af5518.svn-base +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "its1a", - "version": "0.1.0", - "description": "nixies.us its1a clock web assets", - "main": "index.js", - "scripts": { - "test": "echo blah" - }, - "author": "Paul Andrews", - "license": "ISC", - "devDependencies": { - "grunt": "~0.4.5", - "grunt-contrib-concat": "^0.5.1", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-nodeunit": "~0.4.1", - "grunt-contrib-uglify": "~0.5.0", - "grunt-contrib-watch": "*", - "gulp": "*", - "gulp-beautify": "*", - "del": "^2.2.1", - "gulp-clean-css": "*", - "gulp-gzip": "*", - "gulp-htmlmin": "*", - "gulp-if": "*", - "gulp-inline": "*", - "gulp-plumber": "*", - "gulp-uglify": "*", - "gulp-useref": "*", - "gulp-css-inline-images": "*", - "gulp-base64-favicon": "*", - "yargs": "^5.0.0" - } -} diff --git a/.svn/pristine/53/535dbfe1c30de3cbd1bb77fd1a6c7cc93358d8ed.svn-base b/.svn/pristine/53/535dbfe1c30de3cbd1bb77fd1a6c7cc93358d8ed.svn-base deleted file mode 100644 index 4663006..0000000 --- a/.svn/pristine/53/535dbfe1c30de3cbd1bb77fd1a6c7cc93358d8ed.svn-base +++ /dev/null @@ -1,869 +0,0 @@ -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } -#define ALEXA -//#define OTA - -#include "Arduino.h" -#include -#include -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#ifdef ALEXA -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); -#ifdef ALEXA -fauxmoESP fauxmo; -#endif -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Manual"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -// Alexa config values -StringConfigItem date_name("date_name", 20, String("date")); -StringConfigItem backlight_name("backlight_name", 20, String("backlight")); -StringConfigItem underlight_name("underlight_name", 20, String("underlight")); -StringConfigItem clock_name("clock_name", 20, String("clock")); -StringConfigItem test_name("test_name", 20, String("test")); -StringConfigItem cycling_name("cycling_name", 20, String("hue cycling")); -StringConfigItem twelve_hour_name("twelve_hour_name", 20, String("12 hour")); -StringConfigItem zero_name("zero_name", 20, String("leading zero")); - -BaseConfigItem *alexaSet[] = { - // Alexa - &date_name, - &backlight_name, - &underlight_name, - &clock_name, - &test_name, - &cycling_name, - &twelve_hour_name, - &zero_name, - 0 -}; - -CompositeConfigItem alexaConfig("alexa", 0, alexaSet); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - &alexaConfig, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *underlight = &ConfigSet1::underlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *out_effect = &ConfigSet1::out_effect; - ByteConfigItem *in_effect = &ConfigSet1::in_effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - BooleanConfigItem *hv = &ConfigSet1::hv; - - // Alexa config values - StringConfigItem *date_name = &::date_name; - StringConfigItem *backlight_name = &::backlight_name; - StringConfigItem *underlight_name = &::underlight_name; - StringConfigItem *clock_name = &::clock_name; - StringConfigItem *test_name = &::test_name; - StringConfigItem *cycling_name = &::cycling_name; - StringConfigItem *twelve_hour_name = &::twelve_hour_name; - StringConfigItem *zero_name = &::zero_name; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - underlight = static_cast(config->get("underlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - out_effect = static_cast(config->get("out_effect")); - in_effect = static_cast(config->get("in_effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - hv = static_cast(config->get("hv")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setHV(*CurrentConfig::hv); - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setOutEffect(*CurrentConfig::out_effect); - clock.setInEffect(*CurrentConfig::in_effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void setTimeFromWifiManager() { - static String oldWifiTime = ""; - - const String &wifiTime = wifiManager.getWifiTime(); - if (wifiTime != oldWifiTime) { - DEBUG(String("Setting time from wifi manager") + wifiTime); - int intValues[6]; - grabInts(wifiTime, &intValues[0], ","); - - timeInitialized = true; - oldWifiTime = wifiTime; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); - } -} - -const byte numLEDs = 10; -#define LED_PIN 1 -LEDRGB leds(numLEDs, LED_PIN); - -void ledDisplay(bool backLight=true, bool underLight=true) { - // Scale normalized brightness to range 0..255 - static byte brightness = 255; - if (!backLight && !underLight) { - if (brightness == 0) { - return; - } else { - brightness = 0; - } - } else { - if (brightness == 0) { - pinMode(LED_PIN, OUTPUT); - digitalWrite(LED_PIN, LOW); - } - brightness = *CurrentConfig::led_scale; - } - - if (!backLight) { - leds.setLedColorHSV(*CurrentConfig::hue, *CurrentConfig::saturation, 0); - } else { - leds.setLedColorHSV(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); - } - - for (int i=0; i<6; i++) { - leds.ledDisplay(i); - } - - if (!underLight) { - leds.setLedColorHSV(*CurrentConfig::hue, *CurrentConfig::saturation, 0); - } else { - leds.setLedColorHSV(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); - } - - for (int i=6; i<10; i++) { - leds.ledDisplay(i); - } - - leds.show(); - - if (brightness == 0) { - pinMode(LED_PIN, INPUT); -// digitalWrite(LED_PIN, HIGH); - } -} - -void ledTimerHandler() { - ledDisplay(*CurrentConfig::backlight, *CurrentConfig::underlight); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { -#ifdef OTA - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -#endif //OTA -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSGlobalConfigHandler wsAlexaHandler(rootConfig, "alexa"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -String *items[] = { - &WSMenuHandler::clockMenu, - &WSMenuHandler::ledsMenu, - &WSMenuHandler::extraMenu, - &WSMenuHandler::alexaMenu, - &WSMenuHandler::presetsMenu, - &WSMenuHandler::infoMenu, - &WSMenuHandler::presetNamesMenu, - 0 -}; - -WSMenuHandler wsMenuHandler(items); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsAlexaHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else if (screen == 7) { // Alexa switch names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { -#ifdef ALEXA - StringConfigItem *sItem = static_cast(item); - int deviceId = fauxmo.getDeviceId(sItem->value.c_str()); - if (deviceId > 0) { - fauxmo.renameDevice(deviceId, value.c_str()); - } - item->fromString(value); - item->put(); - broadcastUpdate(*item); -#endif - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void startFauxMo() { - fauxmo.enable(true); - fauxmo.addDevice(CurrentConfig::date_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::backlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::underlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::clock_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::test_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::cycling_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::twelve_hour_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::zero_name->value.c_str()); - - fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state) { - BooleanConfigItem *item = 0; - switch (device_id) { - case 0: - item = &(*CurrentConfig::time_or_date = !state); - break; - case 1: - item = &(*CurrentConfig::backlight = state); - break; - case 2: - item = &(*CurrentConfig::underlight = state); - break; - case 3: - item = &(*CurrentConfig::hv = state); - break; - case 4: - item = &(*CurrentConfig::display = !state); - break; - case 5: - item = &(*CurrentConfig::hue_cycling = state); - break; - case 6: - item = &(*CurrentConfig::hour_format = state); - break; - case 7: - item = &(*CurrentConfig::leading_zero = state); - break; - } - - if (item != 0) { - item->put(); - } - broadcastUpdate(*item); - }); - fauxmo.onGetState([](unsigned char device_id, const char * device_name) { - bool ret = false; - switch (device_id) { - case 0: - ret = *CurrentConfig::time_or_date; - ret = !ret; - break; - case 1: - ret = *CurrentConfig::backlight; - break; - case 2: - ret = *CurrentConfig::underlight; - break; - case 3: - ret = *CurrentConfig::hv; - break; - case 4: - ret = *CurrentConfig::display; - ret = !ret; - break; - case 5: - ret = *CurrentConfig::hue_cycling; - break; - case 6: - ret = *CurrentConfig::hour_format; - break; - case 7: - ret = *CurrentConfig::leading_zero; - break; - } - - return ret; - }); -} - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - getTime(); - - startFauxMo(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - // Enable LEDs - leds.begin(); - ledDisplay(*CurrentConfig::backlight, *CurrentConfig::underlight); - - initClock(); - - createSSID(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(true); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ -#ifdef OTA - ArduinoOTA.handle(); -#endif - wifiManager.loop(); - setTimeFromWifiManager(); -#ifdef ALEXA - fauxmo.handle(); -#endif - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if ((*CurrentConfig::backlight || *CurrentConfig::underlight) && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false, false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/54/5404a7c12335b679086d2a131bc1a8dd006832f2.svn-base b/.svn/pristine/54/5404a7c12335b679086d2a131bc1a8dd006832f2.svn-base deleted file mode 100644 index a99701f..0000000 --- a/.svn/pristine/54/5404a7c12335b679086d2a131bc1a8dd006832f2.svn-base +++ /dev/null @@ -1,219 +0,0 @@ -#define ONE_TUBE - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -#define DEBUG(...) { Serial.println(__VA_ARGS__); } -//#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -String hostName("ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -//OneNixieClock oneNixieClock(pDriver, 60); -//TwoNixieClock oneNixieClock(pDriver); -//FourNixieClock oneNixieClock(pDriver); -SixNixieClock oneNixieClock(pDriver); -NixieClock *pNixieClock = &oneNixieClock; - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -bool timeInitialized = false; - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void SetupServer() { - DEBUG("SetupServer()"); - - StartOTA(); - - MDNS.begin(hostName.c_str()); - MDNS.addService("http", "tcp", 80); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); - Serial.begin(115200); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - - if (timeInitialized) { - pNixieClock->setClockMode(true); - pNixieClock->setCountSpeed(60); - } else { - pNixieClock->setClockMode(false); - pNixieClock->setCountSpeed(60); - } - - pNixieClock->setFadeMode(0); - pNixieClock->setTimeMode(true); - pNixieClock->setDateFormat(1); - pNixieClock->setShowSeconds(false); - pNixieClock->set12hour(false); - pNixieClock->setOnOff(6, 0); - pNixieClock->setDigitsOn(1500); - pNixieClock->setScrollback(true); - - pNixieClock->loop(nowMs); - timedFunctions.loop(); -} diff --git a/.svn/pristine/54/548de897f4e48e6c7fd159024e8f4e22214e9968.svn-base b/.svn/pristine/54/548de897f4e48e6c7fd159024e8f4e22214e9968.svn-base deleted file mode 100644 index e85513e..0000000 --- a/.svn/pristine/54/548de897f4e48e6c7fd159024e8f4e22214e9968.svn-base +++ /dev/null @@ -1,15 +0,0 @@ -
-
-
-
- Edit the preset names - - - - - -
-
- Close -
-
diff --git a/.svn/pristine/5d/5d7ae195ef2a5f02c01621db4b773573a15b430f.svn-base b/.svn/pristine/5d/5d7ae195ef2a5f02c01621db4b773573a15b430f.svn-base deleted file mode 100644 index d89470b..0000000 --- a/.svn/pristine/5d/5d7ae195ef2a5f02c01621db4b773573a15b430f.svn-base +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.svn/pristine/61/616387cd94885b9422add5e366bf300d7a6f91ac.svn-base b/.svn/pristine/61/616387cd94885b9422add5e366bf300d7a6f91ac.svn-base deleted file mode 100644 index 19c51d5..0000000 --- a/.svn/pristine/61/616387cd94885b9422add5e366bf300d7a6f91ac.svn-base +++ /dev/null @@ -1,53 +0,0 @@ -
-
-

Extra

- -
-
-
-
-
- - -
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- - -
-
- - -
-
- - -
-
-
-
diff --git a/.svn/pristine/69/695e2a0111a3c96ae76d3a9168b7a5706c678088.svn-base b/.svn/pristine/69/695e2a0111a3c96ae76d3a9168b7a5706c678088.svn-base deleted file mode 100644 index d1d15d2..0000000 --- a/.svn/pristine/69/695e2a0111a3c96ae76d3a9168b7a5706c678088.svn-base +++ /dev/null @@ -1,603 +0,0 @@ -#define ONE_TUBE - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#define OTA -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock oneNixieClock(pDriver); -NixieClock *pNixieClock = &oneNixieClock; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Test"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - BooleanConfigItem *show_date = &ConfigSet1::show_date; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -bool timeInitialized = false; - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSMenuHandler wsMenuHandler(0); -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - - pDriver->setIndicator(*CurrentConfig::colons); - - if (timeInitialized || !*CurrentConfig::display) { - pNixieClock->setClockMode(*CurrentConfig::display); - pNixieClock->setCountSpeed(*CurrentConfig::test_speed); - } else { - pNixieClock->setClockMode(false); - pNixieClock->setCountSpeed(60); - } - pNixieClock->setFadeMode(*CurrentConfig::fading); - pNixieClock->setTimeMode(*CurrentConfig::time_or_date); - pNixieClock->setDateFormat(*CurrentConfig::date_format); - pNixieClock->set12hour(*CurrentConfig::hour_format); - pNixieClock->setLeadingZero(*CurrentConfig::leading_zero); - pNixieClock->setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/6a/6aa68e8b45399d499d334012261d7900eb84051e.svn-base b/.svn/pristine/6a/6aa68e8b45399d499d334012261d7900eb84051e.svn-base deleted file mode 100644 index 2d9334d..0000000 --- a/.svn/pristine/6a/6aa68e8b45399d499d334012261d7900eb84051e.svn-base +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(express.static('web')); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"4": { "url" : "presets.html", "title" : "Presets" }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200 - }, - "3": { - 'show_date': true, - 'display': true, - 'test': 60, - 'reset_time': 2500, - 'set_time': 200 - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/6c/6c87eb1b69a71c7e58d69fc25107bedce2a565d8.svn-base b/.svn/pristine/6c/6c87eb1b69a71c7e58d69fc25107bedce2a565d8.svn-base deleted file mode 100644 index 3c0216e..0000000 --- a/.svn/pristine/6c/6c87eb1b69a71c7e58d69fc25107bedce2a565d8.svn-base +++ /dev/null @@ -1,89 +0,0 @@ -const gulp = require('gulp'); -const plumber = require('gulp-plumber'); -const htmlmin = require('gulp-htmlmin'); -const cleancss = require('gulp-clean-css'); -const uglify = require('gulp-uglify'); -const gzip = require('gulp-gzip'); -const del = require('del'); -const useref = require('gulp-useref'); -const gulpif = require('gulp-if'); -const inline = require('gulp-inline'); -const inlineImages = require('gulp-css-inline-images'); -const favicon = require('gulp-base64-favicon'); - -/* Clean destination folder */ -gulp.task('clean', function() { - return del(['data/*']); -}); - -/* Copy static files */ -gulp.task('files', function() { - return gulp.src([ - 'web/**/*.{jpg,jpeg,png,ico,gif}', - 'web/fsversion' - ]) - .pipe(gulp.dest('data/')); -}); - -/* Process HTML, CSS, JS --- INLINE --- */ -gulp.task('inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: cleancss, - disabledTypes: ['svg', 'img'] - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -gulp.task('buildfs_inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: [cleancss], - disabledTypes: ['svg', 'img'] - })) - .pipe(inlineImages({ - webRoot: "web" - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -/* Process HTML, CSS, JS */ -gulp.task('html', function() { - return gulp.src('web/*.html') - .pipe(useref()) - .pipe(plumber()) - .pipe(gulpif('*.css', cleancss())) - .pipe(gulpif('*.js', uglify())) - .pipe(gulpif('*.html', htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - }))) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}); - -/* Build file system */ -gulp.task('buildfs', ['clean', 'files', 'html']); -gulp.task('buildfs2', ['clean', 'files', 'inline']); -gulp.task('default', ['buildfs']); - \ No newline at end of file diff --git a/.svn/pristine/6e/6e989b3b9d6d9ae9827a7eee8c03166b3304a91c.svn-base b/.svn/pristine/6e/6e989b3b9d6d9ae9827a7eee8c03166b3304a91c.svn-base deleted file mode 100644 index d3cdaed..0000000 --- a/.svn/pristine/6e/6e989b3b9d6d9ae9827a7eee8c03166b3304a91c.svn-base +++ /dev/null @@ -1,3 +0,0 @@ -/*! jQuery Mobile 1.4.5 | Git HEADhash: 68e55e7 <> 2014-10-31T17:33:30Z | (c) 2010, 2014 jQuery Foundation, Inc. | jquery.org/license */ - -.ui-icon-action:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M9%2C5v3l5-4L9%2C0v3c0%2C0-5%2C0-5%2C7C6%2C5%2C9%2C5%2C9%2C5z%20M11%2C12H2V5h1l2-2H0v11h13V7l-2%2C2V12z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-alert:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C0L0%2C12h14L7%2C0z%20M7%2C11c-0.553%2C0-1-0.447-1-1s0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1S7.553%2C11%2C7%2C11z%20M7%2C8%20C6.447%2C8%2C6%2C7.553%2C6%2C7V5c0-0.553%2C0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1v2C8%2C7.553%2C7.553%2C8%2C7%2C8z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-arrow-d-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C3%2011%2C0%203.5%2C7.5%200%2C4%200%2C14%2010%2C14%206.5%2C10.5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-d-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2210.5%2C7.5%203%2C0%200%2C3%207.5%2C10.5%204%2C14%2014%2C14%2014%2C4%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-d:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%229%2C7%209%2C0%205%2C0%205%2C7%200%2C7%207%2C14%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C5%207%2C0%200%2C7%207%2C14%207%2C9%2014%2C9%2014%2C5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C7%207%2C0%207%2C5%200%2C5%200%2C9%207%2C9%207%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-u-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C11%206.5%2C3.5%2010%2C0%200%2C0%200%2C10%203.5%2C6.5%2011%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-u-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C0%204%2C0%207.5%2C3.5%200%2C11%203%2C14%2010.5%2C6.5%2014%2C10%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-arrow-u:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C0%200%2C7%205%2C7%205%2C14%209%2C14%209%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-audio:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.018px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014.018%2014%22%20style%3D%22enable-background%3Anew%200%200%2014.018%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M1%2C4C0.447%2C4%2C0%2C4.447%2C0%2C5v4c0%2C0.553%2C0.447%2C1%2C1%2C1h1l4%2C4V0L2%2C4H1z%20M10.346%2C7c0-1.699-1.042-3.154-2.546-3.867L6.982%2C4.68%20C7.885%2C5.107%2C8.51%2C5.98%2C8.51%2C7S7.885%2C8.893%2C6.982%2C9.32L7.8%2C10.867C9.304%2C10.154%2C10.346%2C8.699%2C10.346%2C7z%20M9.447%2C0.017L8.618%2C1.586%20C10.723%2C2.584%2C12.182%2C4.621%2C12.182%2C7s-1.459%2C4.416-3.563%2C5.414l0.829%2C1.569c2.707-1.283%2C4.57-3.925%2C4.57-6.983%20S12.154%2C1.3%2C9.447%2C0.017z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-back:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M5%2C3V0L1%2C4l4%2C4V5c0%2C0%2C6%2C0%2C6%2C3s-5%2C4-5%2C4v2c0%2C0%2C7-1%2C7-6C13%2C4%2C8%2C3%2C5%2C3z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-bars:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-bullets:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M5%2C4h8c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H5C4.447%2C2%2C4%2C2.447%2C4%2C3S4.447%2C4%2C5%2C4z%20M13%2C6H5%20C4.447%2C6%2C4%2C6.447%2C4%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H5c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%20M1%2C2C0.447%2C2%2C0%2C2.447%2C0%2C3s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C2%2C1%2C2z%20M1%2C6%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1s1-0.447%2C1-1C2%2C6.447%2C1.553%2C6%2C1%2C6z%20M1%2C10c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1s1-0.447%2C1-1%20S1.553%2C10%2C1%2C10z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-calendar:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M0%2C8h2V6H0V8z%20M3%2C8h2V6H3V8z%20M6%2C8h2V6H6V8z%20M9%2C8h2V6H9V8z%20M12%2C8h2V6h-2V8z%20M0%2C11h2V9H0V11z%20M3%2C11h2V9H3V11z%20M6%2C11h2V9H6V11z%20%20M9%2C11h2V9H9V11z%20M12%2C11h2V9h-2V11z%20M0%2C14h2v-2H0V14z%20M3%2C14h2v-2H3V14z%20M6%2C14h2v-2H6V14z%20M9%2C14h2v-2H9V14z%20M12%2C1%20c0-0.553-0.447-1-1-1s-1%2C0.447-1%2C1H4c0-0.553-0.447-1-1-1S2%2C0.447%2C2%2C1H0v4h14V1H12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-camera:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M12%2C2.5H9.908c-0.206-0.581-0.756-1-1.408-1h-3c-0.652%2C0-1.202%2C0.419-1.408%2C1H2c-1.104%2C0-2%2C0.896-2%2C2%20v6c0%2C1.104%2C0.896%2C2%2C2%2C2h10c1.104%2C0%2C2-0.896%2C2-2v-6C14%2C3.396%2C13.104%2C2.5%2C12%2C2.5z%20M7%2C10.5c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3C10%2C9.156%2C8.657%2C10.5%2C7%2C10.5z%20M7%2C5.5c-1.104%2C0-2%2C0.896-2%2C2c0%2C1.104%2C0.896%2C2%2C2%2C2c1.104%2C0%2C2-0.896%2C2-2%20C9%2C6.396%2C8.104%2C5.5%2C7%2C5.5z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-carat-d:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2211.949%2C3.404%207%2C8.354%202.05%2C3.404%20-0.071%2C5.525%207%2C12.596%2014.07%2C5.525%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-carat-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2210.596%2C11.949%205.646%2C7%2010.596%2C2.05%208.475%2C-0.071%201.404%2C7%208.475%2C14.07%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-carat-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%223.404%2C2.051%208.354%2C7%203.404%2C11.95%205.525%2C14.07%2012.596%2C7%205.525%2C-0.071%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-carat-u:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%222.051%2C10.596%207%2C5.646%2011.95%2C10.596%2014.07%2C8.475%207%2C1.404%20-0.071%2C8.475%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-check:after,html .ui-btn.ui-checkbox-on.ui-checkbox-on:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2214%2C4%2011%2C1%205.003%2C6.997%203%2C5%200%2C8%204.966%2C13%204.983%2C12.982%205%2C13%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-clock:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C12c-2.762%2C0-5-2.238-5-5s2.238-5%2C5-5s5%2C2.238%2C5%2C5%20S9.762%2C12%2C7%2C12z%20M9%2C6H8V4c0-0.553-0.447-1-1-1S6%2C3.447%2C6%2C4v3c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1S9.553%2C6%2C9%2C6z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-cloud:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M14%2C9.5c0-0.793-0.465-1.473-1.134-1.795C12.949%2C7.484%2C13%2C7.249%2C13%2C7c0-1.104-0.896-2-2-2%20c-0.158%2C0-0.311%2C0.023-0.457%2C0.058C9.816%2C3.549%2C8.286%2C2.5%2C6.5%2C2.5c-2.33%2C0-4.224%2C1.777-4.454%2C4.046C0.883%2C6.76%2C0%2C7.773%2C0%2C9%20c0%2C1.381%2C1.119%2C2.5%2C2.5%2C2.5h10v-0.07C13.361%2C11.206%2C14%2C10.432%2C14%2C9.5z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-comment:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M12%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v7c0%2C1.104%2C0.896%2C2%2C2%2C2h1v3l3-3h6c1.104%2C0%2C2-0.896%2C2-2V2C14%2C0.896%2C13.104%2C0%2C12%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-delete:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C3%2011%2C0%207%2C4%203%2C0%200%2C3%204%2C7%200%2C11%203%2C14%207%2C10%2011%2C14%2014%2C11%2010%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-edit:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M1%2C10l-1%2C4l4-1l7-7L8%2C3L1%2C10z%20M11%2C0L9%2C2l3%2C3l2-2L11%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-eye:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C2C3%2C2%2C0%2C7%2C0%2C7s3%2C5%2C7%2C5s7-5%2C7-5S11%2C2%2C7%2C2z%20M7%2C10c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3C10%2C8.656%2C8.657%2C10%2C7%2C10z%20M7%2C6C6.448%2C6%2C6%2C6.447%2C6%2C7c0%2C0.553%2C0.448%2C1%2C1%2C1s1-0.447%2C1-1C8%2C6.447%2C7.552%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-forbidden:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M12.601%2C11.187C13.476%2C10.018%2C14%2C8.572%2C14%2C7c0-3.866-3.134-7-7-7C5.428%2C0%2C3.982%2C0.524%2C2.813%2C1.399L2.757%2C1.343L2.053%2C2.048%20L2.048%2C2.053L1.343%2C2.758l0.056%2C0.056C0.524%2C3.982%2C0%2C5.428%2C0%2C7c0%2C3.866%2C3.134%2C7%2C7%2C7c1.572%2C0%2C3.018-0.524%2C4.187-1.399l0.056%2C0.057%20l0.705-0.705l0.005-0.005l0.705-0.705L12.601%2C11.187z%20M7%2C2c2.761%2C0%2C5%2C2.238%2C5%2C5c0%2C1.019-0.308%2C1.964-0.832%2C2.754L4.246%2C2.832%20C5.036%2C2.308%2C5.981%2C2%2C7%2C2z%20M7%2C12c-2.761%2C0-5-2.238-5-5c0-1.019%2C0.308-1.964%2C0.832-2.754l6.922%2C6.922C8.964%2C11.692%2C8.019%2C12%2C7%2C12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-forward:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M13%2C4L9%2C0v3C6%2C3%2C1%2C4%2C1%2C8c0%2C5%2C7%2C6%2C7%2C6v-2c0%2C0-5-1-5-4s6-3%2C6-3v3L13%2C4z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-gear:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M13.621%2C5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82%20c-0.079-0.153-0.073-0.337%2C0.017-0.486l0.549-0.915c0.118-0.196%2C0.088-0.448-0.075-0.61l-0.862-0.863%20c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916%2C0.55C9.844%2C2.182%2C9.659%2C2.188%2C9.506%2C2.109C9.244%2C1.975%2C8.97%2C1.861%2C8.686%2C1.77%20c-0.165-0.052-0.29-0.187-0.332-0.354L8.095%2C0.379C8.039%2C0.156%2C7.839%2C0%2C7.609%2C0H6.391c-0.229%2C0-0.43%2C0.156-0.485%2C0.379L5.646%2C1.415%20C5.604%2C1.582%2C5.479%2C1.718%2C5.313%2C1.77c-0.284%2C0.092-0.559%2C0.206-0.82%2C0.34C4.339%2C2.188%2C4.155%2C2.182%2C4.007%2C2.093L3.092%2C1.544%20c-0.196-0.118-0.448-0.087-0.61%2C0.075L1.619%2C2.481C1.457%2C2.644%2C1.426%2C2.896%2C1.544%2C3.093l0.549%2C0.914%20c0.089%2C0.148%2C0.095%2C0.332%2C0.017%2C0.486C1.975%2C4.755%2C1.861%2C5.029%2C1.77%2C5.314c-0.053%2C0.164-0.188%2C0.29-0.354%2C0.332L0.379%2C5.905%20C0.156%2C5.961%2C0%2C6.161%2C0%2C6.391v1.219c0%2C0.229%2C0.156%2C0.43%2C0.379%2C0.485l1.036%2C0.26C1.582%2C8.396%2C1.717%2C8.521%2C1.77%2C8.687%20c0.092%2C0.284%2C0.205%2C0.559%2C0.34%2C0.82C2.188%2C9.66%2C2.182%2C9.844%2C2.093%2C9.993l-0.549%2C0.915c-0.118%2C0.195-0.087%2C0.448%2C0.075%2C0.61%20l0.862%2C0.862c0.162%2C0.163%2C0.414%2C0.193%2C0.61%2C0.075l0.915-0.549c0.148-0.089%2C0.332-0.095%2C0.486-0.017%20c0.262%2C0.135%2C0.536%2C0.248%2C0.82%2C0.34c0.165%2C0.053%2C0.291%2C0.187%2C0.332%2C0.354l0.259%2C1.036C5.96%2C13.844%2C6.16%2C14%2C6.39%2C14h1.22%20c0.229%2C0%2C0.43-0.156%2C0.485-0.379l0.259-1.036c0.042-0.167%2C0.168-0.302%2C0.333-0.354c0.284-0.092%2C0.559-0.205%2C0.82-0.34%20c0.154-0.078%2C0.338-0.072%2C0.486%2C0.017l0.914%2C0.549c0.197%2C0.118%2C0.449%2C0.088%2C0.611-0.074l0.862-0.863%20c0.163-0.162%2C0.193-0.415%2C0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263%2C0.248-0.536%2C0.339-0.82%20c0.053-0.165%2C0.188-0.291%2C0.355-0.333l1.036-0.259C13.844%2C8.039%2C14%2C7.839%2C14%2C7.609V6.39C14%2C6.16%2C13.844%2C5.96%2C13.621%2C5.904z%20M7%2C10%20c-1.657%2C0-3-1.343-3-3s1.343-3%2C3-3s3%2C1.343%2C3%2C3S8.657%2C10%2C7%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-grid:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M3%2C0H1C0.447%2C0%2C0%2C0.447%2C0%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C4%2C0.447%2C3.553%2C0%2C3%2C0z%20M8%2C0H6%20C5.447%2C0%2C5%2C0.447%2C5%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C9%2C0.447%2C8.553%2C0%2C8%2C0z%20M13%2C0h-2c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C14%2C0.447%2C13.553%2C0%2C13%2C0z%20M3%2C5H1C0.447%2C5%2C0%2C5.447%2C0%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1V6C4%2C5.447%2C3.553%2C5%2C3%2C5z%20M8%2C5H6C5.447%2C5%2C5%2C5.447%2C5%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6%20C9%2C5.447%2C8.553%2C5%2C8%2C5z%20M13%2C5h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6C14%2C5.447%2C13.553%2C5%2C13%2C5z%20M3%2C10%20H1c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C4%2C10.447%2C3.553%2C10%2C3%2C10z%20M8%2C10H6c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C9%2C10.447%2C8.553%2C10%2C8%2C10z%20M13%2C10h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1v-2C14%2C10.447%2C13.553%2C10%2C13%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-heart:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C1.872c-2-3-7-2-7%2C2c0%2C3%2C4%2C7%2C4%2C7s2.417%2C2.479%2C3%2C3c0.583-0.521%2C3-3%2C3-3s4-4%2C4-7%20C14-0.128%2C9-1.128%2C7%2C1.872z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-home:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C0%200%2C7%202%2C7%202%2C14%205%2C14%205%2C9%209%2C9%209%2C14%2012%2C14%2012%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-info:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C2c0.552%2C0%2C1%2C0.447%2C1%2C1S7.552%2C4%2C7%2C4S6%2C3.553%2C6%2C3%20S6.448%2C2%2C7%2C2z%20M9%2C11H5v-1h1V6H5V5h3v5h1V11z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-location:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C0C4.791%2C0%2C3%2C1.791%2C3%2C4c0%2C2%2C4%2C10%2C4%2C10s4-8%2C4-10C11%2C1.791%2C9.209%2C0%2C7%2C0z%20M7%2C6C5.896%2C6%2C5%2C5.104%2C5%2C4%20s0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2S8.104%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-lock:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M12%2C6V5c0-2.762-2.238-5-5-5C4.239%2C0%2C2%2C2.238%2C2%2C5v1H1v8h12V6H12z%20M7.5%2C9.848V12h-1V9.848%20C6.207%2C9.673%2C6%2C9.366%2C6%2C9c0-0.553%2C0.448-1%2C1-1s1%2C0.447%2C1%2C1C8%2C9.366%2C7.793%2C9.673%2C7.5%2C9.848z%20M10%2C6H4V5c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3V6z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-mail:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M0%2C3.75V12h14V3.75L7%2C9L0%2C3.75z%20M14%2C2H0l7%2C5L14%2C2z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-minus:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Crect%20y%3D%225%22%20style%3D%22fill%3A%23FFFFFF%3B%22%20width%3D%2214%22%20height%3D%224%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-navigation:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2213%2C1%200%2C6%207%2C7%208%2C14%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-phone:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%22-0.01%200.008%2014%2014%22%20style%3D%22enable-background%3Anew%20-0.01%200.008%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M6.939%2C9.189C6.165%2C8.557%2C5.271%2C7.705%2C4.497%2C6.744C3.953%2C6.071%2C3.473%2C5.363%2C3.969%2C4.866l-3.482-3.48%20C-0.021%2C2.02-1.146%2C5.04%2C3.675%2C9.984c5.08%2C5.211%2C8.356%2C4.097%2C8.92%2C3.511l-3.396-3.4C8.725%2C10.568%2C8.113%2C10.146%2C6.939%2C9.189z%20%20M13.82%2C11.519v-0.004c0%2C0-2.648-2.646-2.649-2.647c-0.21-0.211-0.546-0.205-0.754%2C0.002L9.455%2C9.831l3.403%2C3.407%20c0%2C0%2C0.962-0.96%2C0.961-0.961l0.002-0.001C14.043%2C12.056%2C14.021%2C11.721%2C13.82%2C11.519z%20M5.192%2C3.644V3.642%20c0.222-0.222%2C0.2-0.557%2C0-0.758V2.881c0%2C0-2.726-2.725-2.727-2.726C2.255-0.055%2C1.92-0.05%2C1.712%2C0.156L0.751%2C1.121l3.479%2C3.482%20C4.231%2C4.604%2C5.192%2C3.645%2C5.192%2C3.644z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-plus:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C5%209%2C5%209%2C0%205%2C0%205%2C5%200%2C5%200%2C9%205%2C9%205%2C14%209%2C14%209%2C9%2014%2C9%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-power:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M11.243%2C2.408c-0.392-0.401-1.024-0.401-1.415%2C0c-0.391%2C0.401-0.391%2C1.054%2C0%2C1.455%20C10.584%2C4.642%2C11%2C5.675%2C11%2C6.773s-0.416%2C2.133-1.172%2C2.91c-1.512%2C1.558-4.145%2C1.558-5.656%2C0C3.416%2C8.904%2C3%2C7.872%2C3%2C6.773%20C3%2C5.673%2C3.416%2C4.64%2C4.172%2C3.863c0.39-0.401%2C0.39-1.054%2C0-1.455c-0.391-0.401-1.024-0.401-1.415%2C0C1.624%2C3.574%2C1%2C5.125%2C1%2C6.773%20c0%2C1.647%2C0.624%2C3.199%2C1.757%2C4.365c1.134%2C1.166%2C2.64%2C1.809%2C4.243%2C1.809c1.604%2C0%2C3.109-0.645%2C4.243-1.811%20C12.376%2C9.975%2C13%2C8.423%2C13%2C6.773C13%2C5.125%2C12.376%2C3.574%2C11.243%2C2.408z%20M7%2C8.053c0.553%2C0%2C1-0.445%2C1-1v-6c0-0.553-0.447-1-1-1%20c-0.553%2C0-1%2C0.447-1%2C1v6C6%2C7.604%2C6.447%2C8.053%2C7%2C8.053z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-recycle:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M3%2C7h1L2%2C4L0%2C7h1c0%2C3.313%2C2.687%2C6%2C6%2C6c0.702%2C0%2C1.374-0.127%2C2-0.35v-2.205C8.41%2C10.789%2C7.732%2C11%2C7%2C11%20C4.791%2C11%2C3%2C9.209%2C3%2C7z%20M13%2C7c0-3.313-2.688-6-6-6C6.298%2C1%2C5.626%2C1.127%2C5%2C1.349v2.206C5.59%2C3.211%2C6.268%2C3%2C7%2C3c2.209%2C0%2C4%2C1.791%2C4%2C4%20h-1l2%2C3l2-3H13z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-refresh:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.001px%22%20height%3D%2214.002px%22%20viewBox%3D%220%200%2014.001%2014.002%22%20style%3D%22enable-background%3Anew%200%200%2014.001%2014.002%3B%22%20%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M14.001%2C6.001v-6l-2.06%2C2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994%2C2.872%2C0.153%2C0.939%2C3.501%20c-1.933%2C3.348-0.786%2C7.629%2C2.562%2C9.562c3.348%2C1.933%2C7.629%2C0.785%2C9.562-2.562l-1.732-1c-1.381%2C2.392-4.438%2C3.211-6.83%2C1.83%20s-3.211-4.438-1.83-6.83s4.438-3.211%2C6.83-1.83c0.389%2C0.225%2C0.718%2C0.506%2C1.02%2C0.81l-2.52%2C2.52H14.001z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-search:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M10.171%2C8.766c0.617-0.888%2C0.979-1.964%2C0.979-3.126c0-3.037-2.463-5.5-5.5-5.5s-5.5%2C2.463-5.5%2C5.5%20s2.463%2C5.5%2C5.5%2C5.5c1.152%2C0%2C2.223-0.355%2C3.104-0.962l3.684%2C3.683l1.414-1.414L10.171%2C8.766z%20M5.649%2C9.14c-1.933%2C0-3.5-1.567-3.5-3.5%20c0-1.933%2C1.567-3.5%2C3.5-3.5c1.933%2C0%2C3.5%2C1.567%2C3.5%2C3.5C9.149%2C7.572%2C7.582%2C9.14%2C5.649%2C9.14z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-shop:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M10%2C4V3c0-1.657-1.343-3-3-3S4%2C1.343%2C4%2C3v1H1v10h12V4H10z%20M4.5%2C6C4.224%2C6%2C4%2C5.776%2C4%2C5.5%20S4.224%2C5%2C4.5%2C5S5%2C5.224%2C5%2C5.5S4.776%2C6%2C4.5%2C6z%20M5%2C3c0-1.104%2C0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2v1H5V3z%20M9.5%2C6C9.225%2C6%2C9%2C5.776%2C9%2C5.5%20S9.225%2C5%2C9.5%2C5S10%2C5.224%2C10%2C5.5S9.775%2C6%2C9.5%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-star:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2214%2C5%209%2C5%207%2C0%205%2C5%200%2C5%204%2C8%202.625%2C13%207%2C10%2011.375%2C13%2010%2C8%20%22%2F%3E%3C%2Fsvg%3E")}.ui-icon-tag:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M5%2C0H0v5l9%2C9l5-5L5%2C0z%20M3%2C4C2.447%2C4%2C2%2C3.553%2C2%2C3s0.447-1%2C1-1s1%2C0.447%2C1%2C1S3.553%2C4%2C3%2C4z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-user:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M8.851%2C10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383%2C8.49%2C9.738%2C7.621%2C9.891%2C6.465C10.493%2C6.355%2C10.5%2C5.967%2C10.5%2C5.5%20c0-0.437-0.008-0.804-0.502-0.94C9.999%2C4.539%2C10%2C4.521%2C10%2C4.5c0-2.103-1-4-2-4C8%2C0.5%2C7.5%2C0%2C6.5%2C0C5%2C0%2C4%2C1.877%2C4%2C4.5%20c0%2C0.021%2C0.001%2C0.039%2C0.002%2C0.06C3.508%2C4.696%2C3.5%2C5.063%2C3.5%2C5.5c0%2C0.467%2C0.007%2C0.855%2C0.609%2C0.965%20C4.262%2C7.621%2C4.617%2C8.49%2C5.303%2C8.997c0.047%2C0.341%2C0.026%2C0.704-0.153%2C1.104C1.503%2C10.503%2C0%2C12%2C0%2C12v2h14v-2%20C14%2C12%2C12.497%2C10.503%2C8.851%2C10.101z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-icon-video:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%20-2%2014%2014%22%20style%3D%22enable-background%3Anew%200%20-2%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M8%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2h6c1.104%2C0%2C2-0.896%2C2-2V5V2C10%2C0.896%2C9.104%2C0%2C8%2C0z%20%20M10%2C5l4%2C4V1L10%2C5z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-action:after,.ui-alt-icon .ui-icon-action:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M9%2C5v3l5-4L9%2C0v3c0%2C0-5%2C0-5%2C7C6%2C5%2C9%2C5%2C9%2C5z%20M11%2C12H2V5h1l2-2H0v11h13V7l-2%2C2V12z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-alert:after,.ui-alt-icon .ui-icon-alert:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0L0%2C12h14L7%2C0z%20M7%2C11c-0.553%2C0-1-0.447-1-1s0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1S7.553%2C11%2C7%2C11z%20M7%2C8C6.447%2C8%2C6%2C7.553%2C6%2C7V5%20c0-0.553%2C0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1v2C8%2C7.553%2C7.553%2C8%2C7%2C8z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-d:after,.ui-alt-icon .ui-icon-arrow-d:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%229%2C7%209%2C0%205%2C0%205%2C7%200%2C7%207%2C14%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-d-l:after,.ui-alt-icon .ui-icon-arrow-d-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C3%2011%2C0%203.5%2C7.5%200%2C4%200%2C14%2010%2C14%206.5%2C10.5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-d-r:after,.ui-alt-icon .ui-icon-arrow-d-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2210.5%2C7.5%203%2C0%200%2C3%207.5%2C10.5%204%2C14%2014%2C14%2014%2C4%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-l:after,.ui-alt-icon .ui-icon-arrow-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C5%207%2C0%200%2C7%207%2C14%207%2C9%2014%2C9%2014%2C5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-r:after,.ui-alt-icon .ui-icon-arrow-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C7%207%2C0%207%2C5%200%2C5%200%2C9%207%2C9%207%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-u:after,.ui-alt-icon .ui-icon-arrow-u:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C0%200%2C7%205%2C7%205%2C14%209%2C14%209%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-u-l:after,.ui-alt-icon .ui-icon-arrow-u-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C11%206.5%2C3.5%2010%2C0%200%2C0%200%2C10%203.5%2C6.5%2011%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-arrow-u-r:after,.ui-alt-icon .ui-icon-arrow-u-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C0%204%2C0%207.5%2C3.5%200%2C11%203%2C14%2010.5%2C6.5%2014%2C10%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-audio:after,.ui-alt-icon .ui-icon-audio:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.018px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014.018%2014%22%20style%3D%22enable-background%3Anew%200%200%2014.018%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C4C0.447%2C4%2C0%2C4.447%2C0%2C5v4c0%2C0.553%2C0.447%2C1%2C1%2C1h1l4%2C4V0L2%2C4H1z%20M10.346%2C7c0-1.699-1.042-3.154-2.546-3.867L6.982%2C4.68%20C7.885%2C5.107%2C8.51%2C5.98%2C8.51%2C7S7.885%2C8.893%2C6.982%2C9.32L7.8%2C10.867C9.304%2C10.154%2C10.346%2C8.699%2C10.346%2C7z%20M9.447%2C0.017L8.618%2C1.586%20C10.723%2C2.584%2C12.182%2C4.621%2C12.182%2C7s-1.459%2C4.416-3.563%2C5.414l0.829%2C1.569c2.707-1.283%2C4.57-3.925%2C4.57-6.983%20S12.154%2C1.3%2C9.447%2C0.017z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-back:after,.ui-alt-icon .ui-icon-back:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C3V0L1%2C4l4%2C4V5c0%2C0%2C6%2C0%2C6%2C3s-5%2C4-5%2C4v2c0%2C0%2C7-1%2C7-6C13%2C4%2C8%2C3%2C5%2C3z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-bars:after,.ui-alt-icon .ui-icon-bars:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1C0.447%2C6%2C0%2C6.447%2C0%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1h12%20c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-bullets:after,.ui-alt-icon .ui-icon-bullets:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C4h8c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H5C4.447%2C2%2C4%2C2.447%2C4%2C3S4.447%2C4%2C5%2C4z%20M13%2C6H5C4.447%2C6%2C4%2C6.447%2C4%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H5c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1h8%20c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%20M1%2C2C0.447%2C2%2C0%2C2.447%2C0%2C3s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C2%2C1%2C2z%20M1%2C6C0.447%2C6%2C0%2C6.447%2C0%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1s1-0.447%2C1-1C2%2C6.447%2C1.553%2C6%2C1%2C6z%20M1%2C10c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C10%2C1%2C10z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-calendar:after,.ui-alt-icon .ui-icon-calendar:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C8h2V6H0V8z%20M3%2C8h2V6H3V8z%20M6%2C8h2V6H6V8z%20M9%2C8h2V6H9V8z%20M12%2C8h2V6h-2V8z%20M0%2C11h2V9H0V11z%20M3%2C11h2V9H3V11z%20M6%2C11h2V9H6V11z%20%20M9%2C11h2V9H9V11z%20M12%2C11h2V9h-2V11z%20M0%2C14h2v-2H0V14z%20M3%2C14h2v-2H3V14z%20M6%2C14h2v-2H6V14z%20M9%2C14h2v-2H9V14z%20M12%2C1%20c0-0.553-0.447-1-1-1s-1%2C0.447-1%2C1H4c0-0.553-0.447-1-1-1S2%2C0.447%2C2%2C1H0v4h14V1H12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-camera:after,.ui-alt-icon .ui-icon-camera:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C2.5H9.908c-0.206-0.581-0.756-1-1.408-1h-3c-0.652%2C0-1.202%2C0.419-1.408%2C1H2c-1.104%2C0-2%2C0.896-2%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2%20h10c1.104%2C0%2C2-0.896%2C2-2v-6C14%2C3.396%2C13.104%2C2.5%2C12%2C2.5z%20M7%2C10.5c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3%20C10%2C9.156%2C8.657%2C10.5%2C7%2C10.5z%20M7%2C5.5c-1.104%2C0-2%2C0.896-2%2C2c0%2C1.104%2C0.896%2C2%2C2%2C2c1.104%2C0%2C2-0.896%2C2-2C9%2C6.396%2C8.104%2C5.5%2C7%2C5.5z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-carat-d:after,.ui-alt-icon .ui-icon-carat-d:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2211.949%2C3.404%207%2C8.354%202.05%2C3.404%20-0.071%2C5.525%207%2C12.596%2014.07%2C5.525%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-carat-l:after,.ui-alt-icon .ui-icon-carat-l:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2210.596%2C11.949%205.646%2C7%2010.596%2C2.05%208.475%2C-0.071%201.404%2C7%208.475%2C14.07%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-carat-r:after,.ui-alt-icon .ui-icon-carat-r:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%223.404%2C2.051%208.354%2C7%203.404%2C11.95%205.525%2C14.07%2012.596%2C7%205.525%2C-0.071%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-carat-u:after,.ui-alt-icon .ui-icon-carat-u:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%222.051%2C10.596%207%2C5.646%2011.95%2C10.596%2014.07%2C8.475%207%2C1.404%20-0.071%2C8.475%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-check:after,.ui-alt-icon .ui-icon-check:after,html .ui-alt-icon.ui-btn.ui-checkbox-on:after,html .ui-alt-icon .ui-btn.ui-checkbox-on:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C4%2011%2C1%205.003%2C6.997%203%2C5%200%2C8%204.966%2C13%204.983%2C12.982%205%2C13%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-clock:after,.ui-alt-icon .ui-icon-clock:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C12c-2.762%2C0-5-2.238-5-5s2.238-5%2C5-5s5%2C2.238%2C5%2C5%20S9.762%2C12%2C7%2C12z%20M9%2C6H8V4c0-0.553-0.447-1-1-1S6%2C3.447%2C6%2C4v3c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1S9.553%2C6%2C9%2C6z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-cloud:after,.ui-alt-icon .ui-icon-cloud:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M14%2C9.5c0-0.793-0.465-1.473-1.134-1.795C12.949%2C7.484%2C13%2C7.249%2C13%2C7c0-1.104-0.896-2-2-2c-0.158%2C0-0.311%2C0.023-0.457%2C0.058%20C9.816%2C3.549%2C8.286%2C2.5%2C6.5%2C2.5c-2.33%2C0-4.224%2C1.777-4.454%2C4.046C0.883%2C6.76%2C0%2C7.773%2C0%2C9c0%2C1.381%2C1.119%2C2.5%2C2.5%2C2.5h10v-0.07%20C13.361%2C11.206%2C14%2C10.432%2C14%2C9.5z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-comment:after,.ui-alt-icon .ui-icon-comment:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v7c0%2C1.104%2C0.896%2C2%2C2%2C2h1v3l3-3h6c1.104%2C0%2C2-0.896%2C2-2V2C14%2C0.896%2C13.104%2C0%2C12%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-delete:after,.ui-alt-icon .ui-icon-delete:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C3%2011%2C0%207%2C4%203%2C0%200%2C3%204%2C7%200%2C11%203%2C14%207%2C10%2011%2C14%2014%2C11%2010%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-edit:after,.ui-alt-icon .ui-icon-edit:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C10l-1%2C4l4-1l7-7L8%2C3L1%2C10z%20M11%2C0L9%2C2l3%2C3l2-2L11%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-eye:after,.ui-alt-icon .ui-icon-eye:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C2C3%2C2%2C0%2C7%2C0%2C7s3%2C5%2C7%2C5s7-5%2C7-5S11%2C2%2C7%2C2z%20M7%2C10c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3%20C10%2C8.656%2C8.657%2C10%2C7%2C10z%20M7%2C6C6.448%2C6%2C6%2C6.447%2C6%2C7c0%2C0.553%2C0.448%2C1%2C1%2C1s1-0.447%2C1-1C8%2C6.447%2C7.552%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-forbidden:after,.ui-alt-icon .ui-icon-forbidden:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12.601%2C11.187C13.476%2C10.018%2C14%2C8.572%2C14%2C7c0-3.866-3.134-7-7-7C5.428%2C0%2C3.982%2C0.524%2C2.813%2C1.399L2.757%2C1.343L2.053%2C2.048%20L2.048%2C2.053L1.343%2C2.758l0.056%2C0.056C0.524%2C3.982%2C0%2C5.428%2C0%2C7c0%2C3.866%2C3.134%2C7%2C7%2C7c1.572%2C0%2C3.018-0.524%2C4.187-1.399l0.056%2C0.057%20l0.705-0.705l0.005-0.005l0.705-0.705L12.601%2C11.187z%20M7%2C2c2.761%2C0%2C5%2C2.238%2C5%2C5c0%2C1.019-0.308%2C1.964-0.832%2C2.754L4.246%2C2.832%20C5.036%2C2.308%2C5.981%2C2%2C7%2C2z%20M7%2C12c-2.761%2C0-5-2.238-5-5c0-1.019%2C0.308-1.964%2C0.832-2.754l6.922%2C6.922C8.964%2C11.692%2C8.019%2C12%2C7%2C12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-forward:after,.ui-alt-icon .ui-icon-forward:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M13%2C4L9%2C0v3C6%2C3%2C1%2C4%2C1%2C8c0%2C5%2C7%2C6%2C7%2C6v-2c0%2C0-5-1-5-4s6-3%2C6-3v3L13%2C4z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-gear:after,.ui-alt-icon .ui-icon-gear:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M13.621%2C5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82%20c-0.079-0.153-0.073-0.337%2C0.017-0.486l0.549-0.915c0.118-0.196%2C0.088-0.448-0.075-0.61l-0.862-0.863%20c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916%2C0.55C9.844%2C2.182%2C9.659%2C2.188%2C9.506%2C2.109C9.244%2C1.975%2C8.97%2C1.861%2C8.686%2C1.77%20c-0.165-0.052-0.29-0.187-0.332-0.354L8.095%2C0.379C8.039%2C0.156%2C7.839%2C0%2C7.609%2C0H6.391c-0.229%2C0-0.43%2C0.156-0.485%2C0.379L5.646%2C1.415%20C5.604%2C1.582%2C5.479%2C1.718%2C5.313%2C1.77c-0.284%2C0.092-0.559%2C0.206-0.82%2C0.34C4.339%2C2.188%2C4.155%2C2.182%2C4.007%2C2.093L3.092%2C1.544%20c-0.196-0.118-0.448-0.087-0.61%2C0.075L1.619%2C2.481C1.457%2C2.644%2C1.426%2C2.896%2C1.544%2C3.093l0.549%2C0.914%20c0.089%2C0.148%2C0.095%2C0.332%2C0.017%2C0.486C1.975%2C4.755%2C1.861%2C5.029%2C1.77%2C5.314c-0.053%2C0.164-0.188%2C0.29-0.354%2C0.332L0.379%2C5.905%20C0.156%2C5.961%2C0%2C6.161%2C0%2C6.391v1.219c0%2C0.229%2C0.156%2C0.43%2C0.379%2C0.485l1.036%2C0.26C1.582%2C8.396%2C1.717%2C8.521%2C1.77%2C8.687%20c0.092%2C0.284%2C0.205%2C0.559%2C0.34%2C0.82C2.188%2C9.66%2C2.182%2C9.844%2C2.093%2C9.993l-0.549%2C0.915c-0.118%2C0.195-0.087%2C0.448%2C0.075%2C0.61%20l0.862%2C0.862c0.162%2C0.163%2C0.414%2C0.193%2C0.61%2C0.075l0.915-0.549c0.148-0.089%2C0.332-0.095%2C0.486-0.017%20c0.262%2C0.135%2C0.536%2C0.248%2C0.82%2C0.34c0.165%2C0.053%2C0.291%2C0.187%2C0.332%2C0.354l0.259%2C1.036C5.96%2C13.844%2C6.16%2C14%2C6.39%2C14h1.22%20c0.229%2C0%2C0.43-0.156%2C0.485-0.379l0.259-1.036c0.042-0.167%2C0.168-0.302%2C0.333-0.354c0.284-0.092%2C0.559-0.205%2C0.82-0.34%20c0.154-0.078%2C0.338-0.072%2C0.486%2C0.017l0.914%2C0.549c0.197%2C0.118%2C0.449%2C0.088%2C0.611-0.074l0.862-0.863%20c0.163-0.162%2C0.193-0.415%2C0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263%2C0.248-0.536%2C0.339-0.82%20c0.053-0.165%2C0.188-0.291%2C0.355-0.333l1.036-0.259C13.844%2C8.039%2C14%2C7.839%2C14%2C7.609V6.39C14%2C6.16%2C13.844%2C5.96%2C13.621%2C5.904z%20M7%2C10%20c-1.657%2C0-3-1.343-3-3s1.343-3%2C3-3s3%2C1.343%2C3%2C3S8.657%2C10%2C7%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-grid:after,.ui-alt-icon .ui-icon-grid:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M3%2C0H1C0.447%2C0%2C0%2C0.447%2C0%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C4%2C0.447%2C3.553%2C0%2C3%2C0z%20M8%2C0H6%20C5.447%2C0%2C5%2C0.447%2C5%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C9%2C0.447%2C8.553%2C0%2C8%2C0z%20M13%2C0h-2c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C14%2C0.447%2C13.553%2C0%2C13%2C0z%20M3%2C5H1C0.447%2C5%2C0%2C5.447%2C0%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1V6C4%2C5.447%2C3.553%2C5%2C3%2C5z%20M8%2C5H6C5.447%2C5%2C5%2C5.447%2C5%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6%20C9%2C5.447%2C8.553%2C5%2C8%2C5z%20M13%2C5h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6C14%2C5.447%2C13.553%2C5%2C13%2C5z%20M3%2C10%20H1c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C4%2C10.447%2C3.553%2C10%2C3%2C10z%20M8%2C10H6c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C9%2C10.447%2C8.553%2C10%2C8%2C10z%20M13%2C10h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1v-2C14%2C10.447%2C13.553%2C10%2C13%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-heart:after,.ui-alt-icon .ui-icon-heart:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C1.958c-2-3-7-2.128-7%2C1.872c0%2C3%2C4%2C7%2C4%2C7s2.417%2C2.48%2C3%2C3c0.583-0.52%2C3-3%2C3-3s4-4%2C4-7C14-0.169%2C9-1.042%2C7%2C1.958z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-home:after,.ui-alt-icon .ui-icon-home:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C0%200%2C7%202%2C7%202%2C14%205%2C14%205%2C9%209%2C9%209%2C14%2012%2C14%2012%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-info:after,.ui-alt-icon .ui-icon-info:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C2c0.552%2C0%2C1%2C0.447%2C1%2C1S7.552%2C4%2C7%2C4S6%2C3.553%2C6%2C3%20S6.448%2C2%2C7%2C2z%20M9%2C11H5v-1h1V6H5V5h3v5h1V11z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-location:after,.ui-alt-icon .ui-icon-location:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C4.791%2C0%2C3%2C1.791%2C3%2C4c0%2C2%2C4%2C10%2C4%2C10s4-8%2C4-10C11%2C1.791%2C9.209%2C0%2C7%2C0z%20M7%2C6C5.896%2C6%2C5%2C5.104%2C5%2C4s0.896-2%2C2-2%20c1.104%2C0%2C2%2C0.896%2C2%2C2S8.104%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-lock:after,.ui-alt-icon .ui-icon-lock:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C6V5c0-2.762-2.238-5-5-5C4.239%2C0%2C2%2C2.238%2C2%2C5v1H1v8h12V6H12z%20M7.5%2C9.848V12h-1V9.848C6.207%2C9.673%2C6%2C9.366%2C6%2C9%20c0-0.553%2C0.448-1%2C1-1s1%2C0.447%2C1%2C1C8%2C9.366%2C7.793%2C9.673%2C7.5%2C9.848z%20M10%2C6H4V5c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3V6z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-mail:after,.ui-alt-icon .ui-icon-mail:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C3.75V12h14V3.75L7%2C9L0%2C3.75z%20M14%2C2H0l7%2C5L14%2C2z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-minus:after,.ui-alt-icon .ui-icon-minus:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Crect%20y%3D%225%22%20width%3D%2214%22%20height%3D%224%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-navigation:after,.ui-alt-icon .ui-icon-navigation:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2213%2C1%200%2C6%207%2C7%208%2C14%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-phone:after,.ui-alt-icon .ui-icon-phone:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M6.949%2C9.182C6.175%2C8.549%2C5.281%2C7.697%2C4.507%2C6.736C3.963%2C6.063%2C3.483%2C5.355%2C3.979%2C4.858l-3.482-3.48%20c-0.508%2C0.634-1.633%2C3.654%2C3.188%2C8.598c5.08%2C5.211%2C8.356%2C4.097%2C8.92%2C3.511l-3.396-3.399C8.734%2C10.561%2C8.123%2C10.139%2C6.949%2C9.182z%20%20M13.83%2C11.512v-0.004c0%2C0-2.648-2.646-2.649-2.647c-0.21-0.212-0.546-0.205-0.754%2C0.002L9.465%2C9.823l3.402%2C3.407%20c0%2C0%2C0.963-0.961%2C0.961-0.961l0.002-0.002C14.053%2C12.049%2C14.031%2C11.713%2C13.83%2C11.512z%20M5.202%2C3.636V3.634%20c0.222-0.222%2C0.2-0.557%2C0-0.758V2.873c0%2C0-2.726-2.725-2.727-2.726c-0.21-0.21-0.545-0.205-0.753%2C0.001L0.761%2C1.113L4.24%2C4.595%20C4.241%2C4.596%2C5.202%2C3.637%2C5.202%2C3.636z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-plus:after,.ui-alt-icon .ui-icon-plus:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C5%209%2C5%209%2C0%205%2C0%205%2C5%200%2C5%200%2C9%205%2C9%205%2C14%209%2C14%209%2C9%2014%2C9%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-power:after,.ui-alt-icon .ui-icon-power:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M11.243%2C2.408c-0.392-0.401-1.024-0.401-1.415%2C0c-0.391%2C0.401-0.391%2C1.054%2C0%2C1.455C10.584%2C4.642%2C11%2C5.675%2C11%2C6.773%20s-0.416%2C2.133-1.172%2C2.91c-1.512%2C1.558-4.145%2C1.558-5.656%2C0C3.416%2C8.904%2C3%2C7.872%2C3%2C6.773C3%2C5.673%2C3.416%2C4.64%2C4.172%2C3.863%20c0.39-0.401%2C0.39-1.054%2C0-1.455c-0.391-0.401-1.024-0.401-1.415%2C0C1.624%2C3.574%2C1%2C5.125%2C1%2C6.773c0%2C1.647%2C0.624%2C3.199%2C1.757%2C4.365%20c1.134%2C1.166%2C2.64%2C1.809%2C4.243%2C1.809c1.604%2C0%2C3.109-0.645%2C4.243-1.811C12.376%2C9.975%2C13%2C8.423%2C13%2C6.773%20C13%2C5.125%2C12.376%2C3.574%2C11.243%2C2.408z%20M7%2C8.053c0.553%2C0%2C1-0.445%2C1-1v-6c0-0.553-0.447-1-1-1c-0.553%2C0-1%2C0.447-1%2C1v6%20C6%2C7.604%2C6.447%2C8.053%2C7%2C8.053z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-recycle:after,.ui-alt-icon .ui-icon-recycle:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M3%2C7h1L2%2C4L0%2C7h1c0%2C3.313%2C2.687%2C6%2C6%2C6c0.702%2C0%2C1.374-0.127%2C2-0.35v-2.205C8.41%2C10.789%2C7.732%2C11%2C7%2C11C4.791%2C11%2C3%2C9.209%2C3%2C7z%20%20M13%2C7c0-3.313-2.688-6-6-6C6.298%2C1%2C5.626%2C1.127%2C5%2C1.349v2.206C5.59%2C3.211%2C6.268%2C3%2C7%2C3c2.209%2C0%2C4%2C1.791%2C4%2C4h-1l2%2C3l2-3H13z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-refresh:after,.ui-alt-icon .ui-icon-refresh:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.001px%22%20height%3D%2214.002px%22%20viewBox%3D%220%200%2014.001%2014.002%22%20style%3D%22enable-background%3Anew%200%200%2014.001%2014.002%3B%22%20%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M14.001%2C6.001v-6l-2.06%2C2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994%2C2.872%2C0.153%2C0.939%2C3.501%20c-1.933%2C3.348-0.786%2C7.629%2C2.562%2C9.562c3.348%2C1.933%2C7.629%2C0.785%2C9.562-2.562l-1.732-1c-1.381%2C2.392-4.438%2C3.211-6.83%2C1.83%20s-3.211-4.438-1.83-6.83s4.438-3.211%2C6.83-1.83c0.389%2C0.225%2C0.718%2C0.506%2C1.02%2C0.81l-2.52%2C2.52H14.001z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-search:after,.ui-alt-icon .ui-icon-search:after,.ui-input-search:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M10.171%2C8.766c0.617-0.888%2C0.979-1.964%2C0.979-3.126c0-3.037-2.463-5.5-5.5-5.5s-5.5%2C2.463-5.5%2C5.5s2.463%2C5.5%2C5.5%2C5.5%20c1.152%2C0%2C2.223-0.355%2C3.104-0.962l3.684%2C3.683l1.414-1.414L10.171%2C8.766z%20M5.649%2C9.14c-1.933%2C0-3.5-1.567-3.5-3.5%20c0-1.933%2C1.567-3.5%2C3.5-3.5c1.933%2C0%2C3.5%2C1.567%2C3.5%2C3.5C9.149%2C7.572%2C7.582%2C9.14%2C5.649%2C9.14z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-shop:after,.ui-alt-icon .ui-icon-shop:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M10%2C4V3c0-1.657-1.343-3-3-3S4%2C1.343%2C4%2C3v1H1v10h12V4H10z%20M4.5%2C6C4.224%2C6%2C4%2C5.776%2C4%2C5.5S4.224%2C5%2C4.5%2C5S5%2C5.224%2C5%2C5.5%20S4.776%2C6%2C4.5%2C6z%20M5%2C3c0-1.104%2C0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2v1H5V3z%20M9.5%2C6C9.225%2C6%2C9%2C5.776%2C9%2C5.5S9.225%2C5%2C9.5%2C5S10%2C5.224%2C10%2C5.5%20S9.775%2C6%2C9.5%2C6z%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-star:after,.ui-alt-icon .ui-icon-star:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C5%209%2C5%207%2C0%205%2C5%200%2C5%204%2C8%202.625%2C13%207%2C10%2011.375%2C13%2010%2C8%20%22%2F%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-tag:after,.ui-alt-icon .ui-icon-tag:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C0H0v5l9%2C9l5-5L5%2C0z%20M3%2C4C2.447%2C4%2C2%2C3.553%2C2%2C3s0.447-1%2C1-1s1%2C0.447%2C1%2C1S3.553%2C4%2C3%2C4z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-user:after,.ui-alt-icon .ui-icon-user:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M8.851%2C10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383%2C8.49%2C9.738%2C7.621%2C9.891%2C6.465C10.493%2C6.355%2C10.5%2C5.967%2C10.5%2C5.5%20c0-0.437-0.008-0.804-0.502-0.94C9.999%2C4.539%2C10%2C4.521%2C10%2C4.5c0-2.103-1-4-2-4C8%2C0.5%2C7.5%2C0%2C6.5%2C0C5%2C0%2C4%2C1.877%2C4%2C4.5%20c0%2C0.021%2C0.001%2C0.039%2C0.002%2C0.06C3.508%2C4.696%2C3.5%2C5.063%2C3.5%2C5.5c0%2C0.467%2C0.007%2C0.855%2C0.609%2C0.965%20C4.262%2C7.621%2C4.617%2C8.49%2C5.303%2C8.997c0.047%2C0.341%2C0.026%2C0.704-0.153%2C1.104C1.503%2C10.503%2C0%2C12%2C0%2C12v2h14v-2%20C14%2C12%2C12.497%2C10.503%2C8.851%2C10.101z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E")}.ui-alt-icon.ui-icon-video:after,.ui-alt-icon .ui-icon-video:after{background-image:url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%20-2%2014%2014%22%20style%3D%22enable-background%3Anew%200%20-2%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M8%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2h6c1.104%2C0%2C2-0.896%2C2-2V5V2C10%2C0.896%2C9.104%2C0%2C8%2C0z%20M10%2C5l4%2C4V1L10%2C5z%22%2F%3E%3C%2Fsvg%3E")}.ui-nosvg .ui-icon-action:after{background-image:url(images/icons-png/action-white.png)}.ui-nosvg .ui-icon-alert:after{background-image:url(images/icons-png/alert-white.png)}.ui-nosvg .ui-icon-arrow-d-l:after{background-image:url(images/icons-png/arrow-d-l-white.png)}.ui-nosvg .ui-icon-arrow-d-r:after{background-image:url(images/icons-png/arrow-d-r-white.png)}.ui-nosvg .ui-icon-arrow-d:after{background-image:url(images/icons-png/arrow-d-white.png)}.ui-nosvg .ui-icon-arrow-l:after{background-image:url(images/icons-png/arrow-l-white.png)}.ui-nosvg .ui-icon-arrow-r:after{background-image:url(images/icons-png/arrow-r-white.png)}.ui-nosvg .ui-icon-arrow-u-l:after{background-image:url(images/icons-png/arrow-u-l-white.png)}.ui-nosvg .ui-icon-arrow-u-r:after{background-image:url(images/icons-png/arrow-u-r-white.png)}.ui-nosvg .ui-icon-arrow-u:after{background-image:url(images/icons-png/arrow-u-white.png)}.ui-nosvg .ui-icon-audio:after{background-image:url(images/icons-png/audio-white.png)}.ui-nosvg .ui-icon-back:after{background-image:url(images/icons-png/back-white.png)}.ui-nosvg .ui-icon-bars:after{background-image:url(images/icons-png/bars-white.png)}.ui-nosvg .ui-icon-bullets:after{background-image:url(images/icons-png/bullets-white.png)}.ui-nosvg .ui-icon-calendar:after{background-image:url(images/icons-png/calendar-white.png)}.ui-nosvg .ui-icon-camera:after{background-image:url(images/icons-png/camera-white.png)}.ui-nosvg .ui-icon-carat-d:after{background-image:url(images/icons-png/carat-d-white.png)}.ui-nosvg .ui-icon-carat-l:after{background-image:url(images/icons-png/carat-l-white.png)}.ui-nosvg .ui-icon-carat-r:after{background-image:url(images/icons-png/carat-r-white.png)}.ui-nosvg .ui-icon-carat-u:after{background-image:url(images/icons-png/carat-u-white.png)}.ui-nosvg .ui-icon-check:after,html.ui-nosvg .ui-btn.ui-checkbox-on:after{background-image:url(images/icons-png/check-white.png)}.ui-nosvg .ui-icon-clock:after{background-image:url(images/icons-png/clock-white.png)}.ui-nosvg .ui-icon-cloud:after{background-image:url(images/icons-png/cloud-white.png)}.ui-nosvg .ui-icon-comment:after{background-image:url(images/icons-png/comment-white.png)}.ui-nosvg .ui-icon-delete:after{background-image:url(images/icons-png/delete-white.png)}.ui-nosvg .ui-icon-edit:after{background-image:url(images/icons-png/edit-white.png)}.ui-nosvg .ui-icon-eye:after{background-image:url(images/icons-png/eye-white.png)}.ui-nosvg .ui-icon-forbidden:after{background-image:url(images/icons-png/forbidden-white.png)}.ui-nosvg .ui-icon-forward:after{background-image:url(images/icons-png/forward-white.png)}.ui-nosvg .ui-icon-gear:after{background-image:url(images/icons-png/gear-white.png)}.ui-nosvg .ui-icon-grid:after{background-image:url(images/icons-png/grid-white.png)}.ui-nosvg .ui-icon-heart:after{background-image:url(images/icons-png/heart-white.png)}.ui-nosvg .ui-icon-home:after{background-image:url(images/icons-png/home-white.png)}.ui-nosvg .ui-icon-info:after{background-image:url(images/icons-png/info-white.png)}.ui-nosvg .ui-icon-location:after{background-image:url(images/icons-png/location-white.png)}.ui-nosvg .ui-icon-lock:after{background-image:url(images/icons-png/lock-white.png)}.ui-nosvg .ui-icon-mail:after{background-image:url(images/icons-png/mail-white.png)}.ui-nosvg .ui-icon-minus:after{background-image:url(images/icons-png/minus-white.png)}.ui-nosvg .ui-icon-navigation:after{background-image:url(images/icons-png/navigation-white.png)}.ui-nosvg .ui-icon-phone:after{background-image:url(images/icons-png/phone-white.png)}.ui-nosvg .ui-icon-plus:after{background-image:url(images/icons-png/plus-white.png)}.ui-nosvg .ui-icon-power:after{background-image:url(images/icons-png/power-white.png)}.ui-nosvg .ui-icon-recycle:after{background-image:url(images/icons-png/recycle-white.png)}.ui-nosvg .ui-icon-refresh:after{background-image:url(images/icons-png/refresh-white.png)}.ui-nosvg .ui-icon-search:after{background-image:url(images/icons-png/search-white.png)}.ui-nosvg .ui-icon-shop:after{background-image:url(images/icons-png/shop-white.png)}.ui-nosvg .ui-icon-star:after{background-image:url(images/icons-png/star-white.png)}.ui-nosvg .ui-icon-tag:after{background-image:url(images/icons-png/tag-white.png)}.ui-nosvg .ui-icon-user:after{background-image:url(images/icons-png/user-white.png)}.ui-nosvg .ui-icon-video:after{background-image:url(images/icons-png/video-white.png)}.ui-nosvg .ui-alt-icon.ui-icon-action:after,.ui-nosvg .ui-alt-icon .ui-icon-action:after{background-image:url(images/icons-png/action-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-alert:after,.ui-nosvg .ui-alt-icon .ui-icon-alert:after{background-image:url(images/icons-png/alert-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-d:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-d:after{background-image:url(images/icons-png/arrow-d-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-d-l:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-d-l:after{background-image:url(images/icons-png/arrow-d-l-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-d-r:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-d-r:after{background-image:url(images/icons-png/arrow-d-r-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-l:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-l:after{background-image:url(images/icons-png/arrow-l-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-r:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-r:after{background-image:url(images/icons-png/arrow-r-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-u:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-u:after{background-image:url(images/icons-png/arrow-u-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-u-l:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-u-l:after{background-image:url(images/icons-png/arrow-u-l-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-arrow-u-r:after,.ui-nosvg .ui-alt-icon .ui-icon-arrow-u-r:after{background-image:url(images/icons-png/arrow-u-r-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-audio:after,.ui-nosvg .ui-alt-icon .ui-icon-audio:after{background-image:url(images/icons-png/audio-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-back:after,.ui-nosvg .ui-alt-icon .ui-icon-back:after{background-image:url(images/icons-png/back-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-bars:after,.ui-nosvg .ui-alt-icon .ui-icon-bars:after{background-image:url(images/icons-png/bars-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-bullets:after,.ui-nosvg .ui-alt-icon .ui-icon-bullets:after{background-image:url(images/icons-png/bullets-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-calendar:after,.ui-nosvg .ui-alt-icon .ui-icon-calendar:after{background-image:url(images/icons-png/calendar-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-camera:after,.ui-nosvg .ui-alt-icon .ui-icon-camera:after{background-image:url(images/icons-png/camera-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-carat-d:after,.ui-nosvg .ui-alt-icon .ui-icon-carat-d:after{background-image:url(images/icons-png/carat-d-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-carat-l:after,.ui-nosvg .ui-alt-icon .ui-icon-carat-l:after{background-image:url(images/icons-png/carat-l-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-carat-r:after,.ui-nosvg .ui-alt-icon .ui-icon-carat-r:after{background-image:url(images/icons-png/carat-r-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-carat-u:after,.ui-nosvg .ui-alt-icon .ui-icon-carat-u:after{background-image:url(images/icons-png/carat-u-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-check:after,.ui-nosvg .ui-alt-icon .ui-icon-check:after,.ui-nosvg .ui-alt-icon.ui-btn.ui-checkbox-on:after,.ui-nosvg .ui-alt-icon .ui-btn.ui-checkbox-on:after{background-image:url(images/icons-png/check-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-clock:after,.ui-nosvg .ui-alt-icon .ui-icon-clock:after{background-image:url(images/icons-png/clock-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-cloud:after,.ui-nosvg .ui-alt-icon .ui-icon-cloud:after{background-image:url(images/icons-png/cloud-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-comment:after,.ui-nosvg .ui-alt-icon .ui-icon-comment:after{background-image:url(images/icons-png/comment-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-delete:after,.ui-nosvg .ui-alt-icon .ui-icon-delete:after{background-image:url(images/icons-png/delete-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-edit:after,.ui-nosvg .ui-alt-icon .ui-icon-edit:after{background-image:url(images/icons-png/edit-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-eye:after,.ui-nosvg .ui-alt-icon .ui-icon-eye:after{background-image:url(images/icons-png/eye-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-forbidden:after,.ui-nosvg .ui-alt-icon .ui-icon-forbidden:after{background-image:url(images/icons-png/forbidden-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-forward:after,.ui-nosvg .ui-alt-icon .ui-icon-forward:after{background-image:url(images/icons-png/forward-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-gear:after,.ui-nosvg .ui-alt-icon .ui-icon-gear:after{background-image:url(images/icons-png/gear-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-grid:after,.ui-nosvg .ui-alt-icon .ui-icon-grid:after{background-image:url(images/icons-png/grid-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-heart:after,.ui-nosvg .ui-alt-icon .ui-icon-heart:after{background-image:url(images/icons-png/heart-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-home:after,.ui-nosvg .ui-alt-icon .ui-icon-home:after{background-image:url(images/icons-png/home-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-info:after,.ui-nosvg .ui-alt-icon .ui-icon-info:after{background-image:url(images/icons-png/info-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-location:after,.ui-nosvg .ui-alt-icon .ui-icon-location:after{background-image:url(images/icons-png/location-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-lock:after,.ui-nosvg .ui-alt-icon .ui-icon-lock:after{background-image:url(images/icons-png/lock-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-mail:after,.ui-nosvg .ui-alt-icon .ui-icon-mail:after{background-image:url(images/icons-png/mail-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-minus:after,.ui-nosvg .ui-alt-icon .ui-icon-minus:after{background-image:url(images/icons-png/minus-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-navigation:after,.ui-nosvg .ui-alt-icon .ui-icon-navigation:after{background-image:url(images/icons-png/navigation-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-phone:after,.ui-nosvg .ui-alt-icon .ui-icon-phone:after{background-image:url(images/icons-png/phone-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-plus:after,.ui-nosvg .ui-alt-icon .ui-icon-plus:after{background-image:url(images/icons-png/plus-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-power:after,.ui-nosvg .ui-alt-icon .ui-icon-power:after{background-image:url(images/icons-png/power-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-recycle:after,.ui-nosvg .ui-alt-icon .ui-icon-recycle:after{background-image:url(images/icons-png/recycle-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-refresh:after,.ui-nosvg .ui-alt-icon .ui-icon-refresh:after{background-image:url(images/icons-png/refresh-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-search:after,.ui-nosvg .ui-alt-icon .ui-icon-search:after,.ui-nosvg .ui-input-search:after{background-image:url(images/icons-png/search-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-shop:after,.ui-nosvg .ui-alt-icon .ui-icon-shop:after{background-image:url(images/icons-png/shop-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-star:after,.ui-nosvg .ui-alt-icon .ui-icon-star:after{background-image:url(images/icons-png/star-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-tag:after,.ui-nosvg .ui-alt-icon .ui-icon-tag:after{background-image:url(images/icons-png/tag-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-user:after,.ui-nosvg .ui-alt-icon .ui-icon-user:after{background-image:url(images/icons-png/user-black.png)}.ui-nosvg .ui-alt-icon.ui-icon-video:after,.ui-nosvg .ui-alt-icon .ui-icon-video:after{background-image:url(images/icons-png/video-black.png)}html{font-size:100%}body,input,select,textarea,button,.ui-btn{font-size:1em;line-height:1.3;font-family:sans-serif}legend,.ui-input-text input,.ui-input-search input{color:inherit;text-shadow:inherit}.ui-mobile label,div.ui-controlgroup-label{font-weight:400;font-size:16px}.ui-field-contain{border-bottom-color:#828282;border-bottom-color:rgba(0,0,0,.15);border-bottom-width:1px;border-bottom-style:solid}.table-stroke thead th,.table-stripe thead th,.table-stripe tbody tr:last-child{border-bottom:1px solid #d6d6d6;border-bottom:1px solid rgba(0,0,0,.1)}.table-stroke tbody th,.table-stroke tbody td{border-bottom:1px solid #e6e6e6;border-bottom:1px solid rgba(0,0,0,.05)}.table-stripe.table-stroke tbody tr:last-child th,.table-stripe.table-stroke tbody tr:last-child td{border-bottom:0}.table-stripe tbody tr:nth-child(odd) td,.table-stripe tbody tr:nth-child(odd) th{background-color:#eee;background-color:rgba(0,0,0,.04)}.ui-btn,label.ui-btn{font-weight:700;border-width:1px;border-style:solid}.ui-btn{text-decoration:none!important}.ui-btn-active{cursor:pointer}.ui-corner-all{-webkit-border-radius:.3125em;border-radius:.3125em}.ui-btn-corner-all,.ui-btn.ui-corner-all,.ui-slider-track.ui-corner-all,.ui-flipswitch.ui-corner-all,.ui-li-count{-webkit-border-radius:.3125em;border-radius:.3125em}.ui-btn-icon-notext.ui-btn-corner-all,.ui-btn-icon-notext.ui-corner-all{-webkit-border-radius:1em;border-radius:1em}.ui-btn-corner-all,.ui-corner-all{-webkit-background-clip:padding;background-clip:padding-box}.ui-popup.ui-corner-all>.ui-popup-arrow-guide{left:.6em;right:.6em;top:.6em;bottom:.6em}.ui-shadow{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);-moz-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}.ui-shadow-inset{-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.2);-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}.ui-overlay-shadow{-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);-moz-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-btn-icon-left:after,.ui-btn-icon-right:after,.ui-btn-icon-top:after,.ui-btn-icon-bottom:after,.ui-btn-icon-notext:after{background-color:#666;background-color:rgba(0,0,0,.3);background-position:center center;background-repeat:no-repeat;-webkit-border-radius:1em;border-radius:1em}.ui-alt-icon.ui-btn:after,.ui-alt-icon .ui-btn:after,html .ui-alt-icon.ui-checkbox-off:after,html .ui-alt-icon.ui-radio-off:after,html .ui-alt-icon .ui-checkbox-off:after,html .ui-alt-icon .ui-radio-off:after{background-color:#666;background-color:rgba(0,0,0,.15)}.ui-nodisc-icon.ui-btn:after,.ui-nodisc-icon .ui-btn:after{background-color:transparent}.ui-shadow-icon.ui-btn:after,.ui-shadow-icon .ui-btn:after{-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-btn.ui-checkbox-off:after,.ui-btn.ui-checkbox-on:after,.ui-btn.ui-radio-off:after,.ui-btn.ui-radio-on:after{display:block;width:18px;height:18px;margin:-9px 2px 0 2px}.ui-checkbox-off:after,.ui-btn.ui-radio-off:after{filter:Alpha(Opacity=30);opacity:.3}.ui-btn.ui-checkbox-off:after,.ui-btn.ui-checkbox-on:after{-webkit-border-radius:.1875em;border-radius:.1875em}.ui-btn.ui-checkbox-off:after{background-color:#666;background-color:rgba(0,0,0,.3)}.ui-radio .ui-btn.ui-radio-on:after{background-image:none;background-color:#fff;width:8px;height:8px;border-width:5px;border-style:solid}.ui-alt-icon.ui-btn.ui-radio-on:after,.ui-alt-icon .ui-btn.ui-radio-on:after{background-color:#000}.ui-icon-loading{background:url(/images/ajax-loader.gif?embed);background-size:2.875em 2.875em}.ui-bar-a,.ui-page-theme-a .ui-bar-inherit,html .ui-bar-a .ui-bar-inherit,html .ui-body-a .ui-bar-inherit,html body .ui-group-theme-a .ui-bar-inherit{background-color:#e9e9e9;border-color:#ddd;color:#333;text-shadow:0 1px 0 #eee;font-weight:700}.ui-bar-a{border-width:1px;border-style:solid}.ui-overlay-a,.ui-page-theme-a,.ui-page-theme-a .ui-panel-wrapper{background-color:#f9f9f9;border-color:#bbb;color:#333;text-shadow:0 1px 0 #f3f3f3}.ui-body-a,.ui-page-theme-a .ui-body-inherit,html .ui-bar-a .ui-body-inherit,html .ui-body-a .ui-body-inherit,html body .ui-group-theme-a .ui-body-inherit,html .ui-panel-page-container-a{background-color:#fff;border-color:#ddd;color:#333;text-shadow:0 1px 0 #f3f3f3}.ui-body-a{border-width:1px;border-style:solid}.ui-page-theme-a a,html .ui-bar-a a,html .ui-body-a a,html body .ui-group-theme-a a{color:#38c;font-weight:700}.ui-page-theme-a a:visited,html .ui-bar-a a:visited,html .ui-body-a a:visited,html body .ui-group-theme-a a:visited{color:#38c}.ui-page-theme-a a:hover,html .ui-bar-a a:hover,html .ui-body-a a:hover,html body .ui-group-theme-a a:hover{color:#059}.ui-page-theme-a a:active,html .ui-bar-a a:active,html .ui-body-a a:active,html body .ui-group-theme-a a:active{color:#059}.ui-page-theme-a .ui-btn,html .ui-bar-a .ui-btn,html .ui-body-a .ui-btn,html body .ui-group-theme-a .ui-btn,html head+body .ui-btn.ui-btn-a,.ui-page-theme-a .ui-btn:visited,html .ui-bar-a .ui-btn:visited,html .ui-body-a .ui-btn:visited,html body .ui-group-theme-a .ui-btn:visited,html head+body .ui-btn.ui-btn-a:visited{background-color:#f6f6f6;border-color:#ddd;color:#333;text-shadow:0 1px 0 #f3f3f3}.ui-page-theme-a .ui-btn:hover,html .ui-bar-a .ui-btn:hover,html .ui-body-a .ui-btn:hover,html body .ui-group-theme-a .ui-btn:hover,html head+body .ui-btn.ui-btn-a:hover{background-color:#ededed;border-color:#ddd;color:#333;text-shadow:0 1px 0 #f3f3f3}.ui-page-theme-a .ui-btn:active,html .ui-bar-a .ui-btn:active,html .ui-body-a .ui-btn:active,html body .ui-group-theme-a .ui-btn:active,html head+body .ui-btn.ui-btn-a:active{background-color:#e8e8e8;border-color:#ddd;color:#333;text-shadow:0 1px 0 #f3f3f3}.ui-page-theme-a .ui-btn.ui-btn-active,html .ui-bar-a .ui-btn.ui-btn-active,html .ui-body-a .ui-btn.ui-btn-active,html body .ui-group-theme-a .ui-btn.ui-btn-active,html head+body .ui-btn.ui-btn-a.ui-btn-active,.ui-page-theme-a .ui-checkbox-on:after,html .ui-bar-a .ui-checkbox-on:after,html .ui-body-a .ui-checkbox-on:after,html body .ui-group-theme-a .ui-checkbox-on:after,.ui-btn.ui-checkbox-on.ui-btn-a:after,.ui-page-theme-a .ui-flipswitch-active,html .ui-bar-a .ui-flipswitch-active,html .ui-body-a .ui-flipswitch-active,html body .ui-group-theme-a .ui-flipswitch-active,html body .ui-flipswitch.ui-bar-a.ui-flipswitch-active,.ui-page-theme-a .ui-slider-track .ui-btn-active,html .ui-bar-a .ui-slider-track .ui-btn-active,html .ui-body-a .ui-slider-track .ui-btn-active,html body .ui-group-theme-a .ui-slider-track .ui-btn-active,html body div.ui-slider-track.ui-body-a .ui-btn-active{background-color:#38c;border-color:#38c;color:#fff;text-shadow:0 1px 0 #059}.ui-page-theme-a .ui-radio-on:after,html .ui-bar-a .ui-radio-on:after,html .ui-body-a .ui-radio-on:after,html body .ui-group-theme-a .ui-radio-on:after,.ui-btn.ui-radio-on.ui-btn-a:after{border-color:#38c}.ui-page-theme-a .ui-btn:focus,html .ui-bar-a .ui-btn:focus,html .ui-body-a .ui-btn:focus,html body .ui-group-theme-a .ui-btn:focus,html head+body .ui-btn.ui-btn-a:focus,.ui-page-theme-a .ui-focus,html .ui-bar-a .ui-focus,html .ui-body-a .ui-focus,html body .ui-group-theme-a .ui-focus,html head+body .ui-btn-a.ui-focus,html head+body .ui-body-a.ui-focus{-webkit-box-shadow:0 0 12px #38c;-moz-box-shadow:0 0 12px #38c;box-shadow:0 0 12px #38c}.ui-bar-b,.ui-page-theme-b .ui-bar-inherit,html .ui-bar-b .ui-bar-inherit,html .ui-body-b .ui-bar-inherit,html body .ui-group-theme-b .ui-bar-inherit{background-color:#1d1d1d;border-color:#1b1b1b;color:#fff;text-shadow:0 1px 0 #111;font-weight:700}.ui-bar-b{border-width:1px;border-style:solid}.ui-overlay-b,.ui-page-theme-b,.ui-page-theme-b .ui-panel-wrapper{background-color:#252525;border-color:#454545;color:#fff;text-shadow:0 1px 0 #111}.ui-body-b,.ui-page-theme-b .ui-body-inherit,html .ui-bar-b .ui-body-inherit,html .ui-body-b .ui-body-inherit,html body .ui-group-theme-b .ui-body-inherit,html .ui-panel-page-container-b{background-color:#2a2a2a;border-color:#1d1d1d;color:#fff;text-shadow:0 1px 0 #111}.ui-body-b{border-width:1px;border-style:solid}.ui-page-theme-b a,html .ui-bar-b a,html .ui-body-b a,html body .ui-group-theme-b a{color:#2ad;font-weight:700}.ui-page-theme-b a:visited,html .ui-bar-b a:visited,html .ui-body-b a:visited,html body .ui-group-theme-b a:visited{color:#2ad}.ui-page-theme-b a:hover,html .ui-bar-b a:hover,html .ui-body-b a:hover,html body .ui-group-theme-b a:hover{color:#08b}.ui-page-theme-b a:active,html .ui-bar-b a:active,html .ui-body-b a:active,html body .ui-group-theme-b a:active{color:#08b}.ui-page-theme-b .ui-btn,html .ui-bar-b .ui-btn,html .ui-body-b .ui-btn,html body .ui-group-theme-b .ui-btn,html head+body .ui-btn.ui-btn-b,.ui-page-theme-b .ui-btn:visited,html .ui-bar-b .ui-btn:visited,html .ui-body-b .ui-btn:visited,html body .ui-group-theme-b .ui-btn:visited,html head+body .ui-btn.ui-btn-b:visited{background-color:#333;border-color:#1f1f1f;color:#fff;text-shadow:0 1px 0 #111}.ui-page-theme-b .ui-btn:hover,html .ui-bar-b .ui-btn:hover,html .ui-body-b .ui-btn:hover,html body .ui-group-theme-b .ui-btn:hover,html head+body .ui-btn.ui-btn-b:hover{background-color:#373737;border-color:#1f1f1f;color:#fff;text-shadow:0 1px 0 #111}.ui-page-theme-b .ui-btn:active,html .ui-bar-b .ui-btn:active,html .ui-body-b .ui-btn:active,html body .ui-group-theme-b .ui-btn:active,html head+body .ui-btn.ui-btn-b:active{background-color:#404040;border-color:#1f1f1f;color:#fff;text-shadow:0 1px 0 #111}.ui-page-theme-b .ui-btn.ui-btn-active,html .ui-bar-b .ui-btn.ui-btn-active,html .ui-body-b .ui-btn.ui-btn-active,html body .ui-group-theme-b .ui-btn.ui-btn-active,html head+body .ui-btn.ui-btn-b.ui-btn-active,.ui-page-theme-b .ui-checkbox-on:after,html .ui-bar-b .ui-checkbox-on:after,html .ui-body-b .ui-checkbox-on:after,html body .ui-group-theme-b .ui-checkbox-on:after,.ui-btn.ui-checkbox-on.ui-btn-b:after,.ui-page-theme-b .ui-flipswitch-active,html .ui-bar-b .ui-flipswitch-active,html .ui-body-b .ui-flipswitch-active,html body .ui-group-theme-b .ui-flipswitch-active,html body .ui-flipswitch.ui-bar-b.ui-flipswitch-active,.ui-page-theme-b .ui-slider-track .ui-btn-active,html .ui-bar-b .ui-slider-track .ui-btn-active,html .ui-body-b .ui-slider-track .ui-btn-active,html body .ui-group-theme-b .ui-slider-track .ui-btn-active,html body div.ui-slider-track.ui-body-b .ui-btn-active{background-color:#2ad;border-color:#2ad;color:#fff;text-shadow:0 1px 0 #08b}.ui-page-theme-b .ui-radio-on:after,html .ui-bar-b .ui-radio-on:after,html .ui-body-b .ui-radio-on:after,html body .ui-group-theme-b .ui-radio-on:after,.ui-btn.ui-radio-on.ui-btn-b:after{border-color:#2ad}.ui-page-theme-b .ui-btn:focus,html .ui-bar-b .ui-btn:focus,html .ui-body-b .ui-btn:focus,html body .ui-group-theme-b .ui-btn:focus,html head+body .ui-btn.ui-btn-b:focus,.ui-page-theme-b .ui-focus,html .ui-bar-b .ui-focus,html .ui-body-b .ui-focus,html body .ui-group-theme-b .ui-focus,html head+body .ui-btn-b.ui-focus,html head+body .ui-body-b.ui-focus{-webkit-box-shadow:0 0 12px #2ad;-moz-box-shadow:0 0 12px #2ad;box-shadow:0 0 12px #2ad}.ui-disabled,.ui-state-disabled,button[disabled],.ui-select .ui-btn.ui-state-disabled{filter:Alpha(Opacity=30);opacity:.3;cursor:default!important;pointer-events:none}.ui-btn:focus,.ui-btn.ui-focus{outline:0}.ui-noboxshadow .ui-shadow,.ui-noboxshadow .ui-shadow-inset,.ui-noboxshadow .ui-overlay-shadow,.ui-noboxshadow .ui-shadow-icon.ui-btn:after,.ui-noboxshadow .ui-shadow-icon .ui-btn:after,.ui-noboxshadow .ui-focus,.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow input:focus,.ui-noboxshadow .ui-panel{-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow .ui-focus{outline-width:1px;outline-style:auto}.ui-mobile,.ui-mobile body{height:99.9%}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border-width:0}.ui-mobile fieldset{min-width:0}@-moz-document url-prefix(){.ui-mobile fieldset{display:table-column;vertical-align:middle}}.ui-mobile-viewport{margin:0;overflow-x:visible;-webkit-text-size-adjust:100%;-ms-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.ui-mobile [data-role=page],.ui-mobile [data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-page{outline:0}.ui-mobile .ui-page-active{display:block;overflow:visible;overflow-x:hidden}@media screen and (orientation:portrait){.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile .ui-page{min-height:300px}}.ui-mobile-rendering>*{visibility:hidden}.ui-nojs{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-loading .ui-loader{display:block}.ui-loader{display:none;z-index:9999999;position:fixed;top:50%;left:50%;border:0}.ui-loader-default{background:0;filter:Alpha(Opacity=18);opacity:.18;width:2.875em;height:2.875em;margin-left:-1.4375em;margin-top:-1.4375em}.ui-loader-verbose{width:12.5em;filter:Alpha(Opacity=88);opacity:.88;box-shadow:0 1px 1px -1px #fff;height:auto;margin-left:-6.875em;margin-top:-2.6875em;padding:.625em}.ui-loader-default h1{font-size:0;width:0;height:0;overflow:hidden}.ui-loader-verbose h1{font-size:1em;margin:0;text-align:center}.ui-loader .ui-icon-loading{background-color:#000;display:block;margin:0;width:2.75em;height:2.75em;padding:.0625em;-webkit-border-radius:2.25em;border-radius:2.25em}.ui-loader-verbose .ui-icon-loading{margin:0 auto .625em;filter:Alpha(Opacity=75);opacity:.75}.ui-loader-textonly{padding:.9375em;margin-left:-7.1875em}.ui-loader-textonly .ui-icon-loading{display:none}.ui-loader-fakefix{position:absolute}.ui-bar,.ui-body{position:relative;padding:.4em 1em;overflow:hidden;display:block;clear:both}.ui-bar h1,.ui-bar h2,.ui-bar h3,.ui-bar h4,.ui-bar h5,.ui-bar h6{margin:0;padding:0;font-size:1em;display:inline-block}.ui-header,.ui-footer{border-width:1px 0;border-style:solid;position:relative}.ui-header:empty,.ui-footer:empty{min-height:2.6875em}.ui-header .ui-title,.ui-footer .ui-title{font-size:1em;min-height:1.1em;text-align:center;display:block;margin:0 30%;padding:.7em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;outline:0!important}.ui-footer .ui-title{margin:0 1em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:1em}.ui-corner-all>.ui-header:first-child,.ui-corner-all>.ui-content:first-child,.ui-corner-all>.ui-footer:first-child{-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit;-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit}.ui-corner-all>.ui-header:last-child,.ui-corner-all>.ui-content:last-child,.ui-corner-all>.ui-footer:last-child{-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit;-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-btn{font-size:16px;margin:.5em 0;padding:.7em 1em;display:block;position:relative;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui-btn-icon-notext,.ui-header button.ui-btn.ui-btn-icon-notext,.ui-footer button.ui-btn.ui-btn-icon-notext{padding:0;width:1.75em;height:1.75em;text-indent:-9999px;white-space:nowrap!important}.ui-mini{font-size:12.5px}.ui-mini .ui-btn{font-size:inherit}.ui-header .ui-btn,.ui-footer .ui-btn{font-size:12.5px;display:inline-block;vertical-align:middle}.ui-header .ui-controlgroup .ui-btn-icon-notext,.ui-footer .ui-controlgroup .ui-btn-icon-notext{font-size:12.5px}.ui-header .ui-btn-left,.ui-header .ui-btn-right{font-size:12.5px}.ui-mini.ui-btn-icon-notext,.ui-mini .ui-btn-icon-notext,.ui-header .ui-btn-icon-notext,.ui-footer .ui-btn-icon-notext{font-size:16px;padding:0}.ui-btn-inline{display:inline-block;vertical-align:middle;margin-right:.625em}.ui-btn-icon-left{padding-left:2.5em}.ui-btn-icon-right{padding-right:2.5em}.ui-btn-icon-top{padding-top:2.5em}.ui-btn-icon-bottom{padding-bottom:2.5em}.ui-header .ui-btn-icon-top,.ui-footer .ui-btn-icon-top,.ui-header .ui-btn-icon-bottom,.ui-footer .ui-btn-icon-bottom{padding-left:.3125em;padding-right:.3125em}.ui-btn-icon-left:after,.ui-btn-icon-right:after,.ui-btn-icon-top:after,.ui-btn-icon-bottom:after,.ui-btn-icon-notext:after{content:"";position:absolute;display:block;width:22px;height:22px}.ui-btn-icon-notext:after,.ui-btn-icon-left:after,.ui-btn-icon-right:after{top:50%;margin-top:-11px}.ui-btn-icon-left:after{left:.5625em}.ui-btn-icon-right:after{right:.5625em}.ui-mini.ui-btn-icon-left:after,.ui-mini .ui-btn-icon-left:after,.ui-header .ui-btn-icon-left:after,.ui-footer .ui-btn-icon-left:after{left:.37em}.ui-mini.ui-btn-icon-right:after,.ui-mini .ui-btn-icon-right:after,.ui-header .ui-btn-icon-right:after,.ui-footer .ui-btn-icon-right:after{right:.37em}.ui-btn-icon-notext:after,.ui-btn-icon-top:after,.ui-btn-icon-bottom:after{left:50%;margin-left:-11px}.ui-btn-icon-top:after{top:.5625em}.ui-btn-icon-bottom:after{top:auto;bottom:.5625em}.ui-header .ui-btn-left,.ui-header .ui-btn-right,.ui-btn-left>[class*=ui-],.ui-btn-right>[class*=ui-]{margin:0}.ui-btn-left,.ui-btn-right{position:absolute;top:.24em}.ui-btn-left{left:.4em}.ui-btn-right{right:.4em}.ui-btn-icon-notext.ui-btn-left{top:.3125em;left:.3125em}.ui-btn-icon-notext.ui-btn-right{top:.3125em;right:.3125em}button.ui-btn,.ui-controlgroup-controls button.ui-btn-icon-notext{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;width:100%}button.ui-btn-inline,.ui-header button.ui-btn,.ui-footer button.ui-btn{width:auto}button.ui-btn::-moz-focus-inner{border:0}button.ui-btn-icon-notext,.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;width:1.75em}.ui-mobile label,.ui-controlgroup-label{display:block;margin:0 0 .4em}.ui-hide-label>label,.ui-hide-label .ui-controlgroup-label,.ui-hide-label .ui-rangeslider label,.ui-hidden-accessible{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-screen-hidden{display:none!important}.ui-mobile-viewport-transitioning,.ui-mobile-viewport-transitioning .ui-page{width:100%;height:100%;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ui-page-pre-in{opacity:0}.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms;animation-timing-function:ease-out;animation-duration:350ms}.out{-webkit-animation-timing-function:ease-in;-webkit-animation-duration:225ms;-moz-animation-timing-function:ease-in;-moz-animation-duration:225ms;animation-timing-function:ease-in;animation-duration:225ms}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeout{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeout{from{opacity:1}to{opacity:0}}@keyframes fadeout{from{opacity:1}to{opacity:0}}.fade.out{opacity:0;-webkit-animation-duration:125ms;-webkit-animation-name:fadeout;-moz-animation-duration:125ms;-moz-animation-name:fadeout;animation-duration:125ms;animation-name:fadeout}.fade.in{opacity:1;-webkit-animation-duration:225ms;-webkit-animation-name:fadein;-moz-animation-duration:225ms;-moz-animation-name:fadein;animation-duration:225ms;animation-name:fadein}.pop{-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;transform-origin:50% 50%}.pop.in{-webkit-transform:scale(1);-webkit-animation-name:popin;-webkit-animation-duration:350ms;-moz-transform:scale(1);-moz-animation-name:popin;-moz-animation-duration:350ms;transform:scale(1);animation-name:popin;animation-duration:350ms;opacity:1}.pop.out{-webkit-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-name:fadeout;-moz-animation-duration:100ms;animation-name:fadeout;animation-duration:100ms;opacity:0}.pop.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein;animation-name:fadein}.pop.out.reverse{-webkit-transform:scale(.8);-webkit-animation-name:popout;-moz-transform:scale(.8);-moz-animation-name:popout;transform:scale(.8);animation-name:popout}@-webkit-keyframes popin{from{-webkit-transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-moz-keyframes popin{from{-moz-transform:scale(.8);opacity:0}to{-moz-transform:scale(1);opacity:1}}@keyframes popin{from{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes popout{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.8);opacity:0}}@-moz-keyframes popout{from{-moz-transform:scale(1);opacity:1}to{-moz-transform:scale(.8);opacity:0}}@keyframes popout{from{transform:scale(1);opacity:1}to{transform:scale(.8);opacity:0}}@-webkit-keyframes slideinfromright{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideinfromright{from{-moz-transform:translateX(100%)}to{-moz-transform:translateX(0)}}@keyframes slideinfromright{from{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideinfromleft{from{-webkit-transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideinfromleft{from{-moz-transform:translateX(-100%)}to{-moz-transform:translateX(0)}}@keyframes slideinfromleft{from{transform:translateX(-100%)}to{transform:translateX(0)}}@-webkit-keyframes slideouttoleft{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-100%,0,0)}}@-moz-keyframes slideouttoleft{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(-100%)}}@keyframes slideouttoleft{from{transform:translateX(0)}to{transform:translateX(-100%)}}@-webkit-keyframes slideouttoright{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0)}}@-moz-keyframes slideouttoright{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(100%)}}@keyframes slideouttoright{from{transform:translateX(0)}to{transform:translateX(100%)}}.slide.out,.slide.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms;animation-timing-function:ease-out;animation-duration:350ms}.slide.out{-webkit-transform:translate3d(-100%,0,0);-webkit-animation-name:slideouttoleft;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft;transform:translateX(-100%);animation-name:slideouttoleft}.slide.in{-webkit-transform:translate3d(0,0,0);-webkit-animation-name:slideinfromright;-moz-transform:translateX(0);-moz-animation-name:slideinfromright;transform:translateX(0);animation-name:slideinfromright}.slide.out.reverse{-webkit-transform:translate3d(100%,0,0);-webkit-animation-name:slideouttoright;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright;transform:translateX(100%);animation-name:slideouttoright}.slide.in.reverse{-webkit-transform:translate3d(0,0,0);-webkit-animation-name:slideinfromleft;-moz-transform:translateX(0);-moz-animation-name:slideinfromleft;transform:translateX(0);animation-name:slideinfromleft}.slidefade.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft;-webkit-animation-duration:225ms;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft;-moz-animation-duration:225ms;transform:translateX(-100%);animation-name:slideouttoleft;animation-duration:225ms}.slidefade.in{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-webkit-animation-duration:200ms;-moz-transform:translateX(0);-moz-animation-name:fadein;-moz-animation-duration:200ms;transform:translateX(0);animation-name:fadein;animation-duration:200ms}.slidefade.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright;-webkit-animation-duration:200ms;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright;-moz-animation-duration:200ms;transform:translateX(100%);animation-name:slideouttoright;animation-duration:200ms}.slidefade.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-webkit-animation-duration:200ms;-moz-transform:translateX(0);-moz-animation-name:fadein;-moz-animation-duration:200ms;transform:translateX(0);animation-name:fadein;animation-duration:200ms}.slidedown.out{-webkit-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-name:fadeout;-moz-animation-duration:100ms;animation-name:fadeout;animation-duration:100ms}.slidedown.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfromtop;-webkit-animation-duration:250ms;-moz-transform:translateY(0);-moz-animation-name:slideinfromtop;-moz-animation-duration:250ms;transform:translateY(0);animation-name:slideinfromtop;animation-duration:250ms}.slidedown.in.reverse{-webkit-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-name:fadein;-moz-animation-duration:150ms;animation-name:fadein;animation-duration:150ms}.slidedown.out.reverse{-webkit-transform:translateY(-100%);-webkit-animation-name:slideouttotop;-webkit-animation-duration:200ms;-moz-transform:translateY(-100%);-moz-animation-name:slideouttotop;-moz-animation-duration:200ms;transform:translateY(-100%);animation-name:slideouttotop;animation-duration:200ms}@-webkit-keyframes slideinfromtop{from{-webkit-transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfromtop{from{-moz-transform:translateY(-100%)}to{-moz-transform:translateY(0)}}@keyframes slideinfromtop{from{transform:translateY(-100%)}to{transform:translateY(0)}}@-webkit-keyframes slideouttotop{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@-moz-keyframes slideouttotop{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(-100%)}}@keyframes slideouttotop{from{transform:translateY(0)}to{transform:translateY(-100%)}}.slideup.out{-webkit-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-name:fadeout;-moz-animation-duration:100ms;animation-name:fadeout;animation-duration:100ms}.slideup.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfrombottom;-webkit-animation-duration:250ms;-moz-transform:translateY(0);-moz-animation-name:slideinfrombottom;-moz-animation-duration:250ms;transform:translateY(0);animation-name:slideinfrombottom;animation-duration:250ms}.slideup.in.reverse{-webkit-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-name:fadein;-moz-animation-duration:150ms;animation-name:fadein;animation-duration:150ms}.slideup.out.reverse{-webkit-transform:translateY(100%);-webkit-animation-name:slideouttobottom;-webkit-animation-duration:200ms;-moz-transform:translateY(100%);-moz-animation-name:slideouttobottom;-moz-animation-duration:200ms;transform:translateY(100%);animation-name:slideouttobottom;animation-duration:200ms}@-webkit-keyframes slideinfrombottom{from{-webkit-transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfrombottom{from{-moz-transform:translateY(100%)}to{-moz-transform:translateY(0)}}@keyframes slideinfrombottom{from{transform:translateY(100%)}to{transform:translateY(0)}}@-webkit-keyframes slideouttobottom{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@-moz-keyframes slideouttobottom{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(100%)}}@keyframes slideouttobottom{from{transform:translateY(0)}to{transform:translateY(100%)}}.viewport-flip{-webkit-perspective:1000;-moz-perspective:1000;perspective:1000;position:absolute}.flip{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-moz-backface-visibility:hidden;-moz-transform:translateX(0);backface-visibility:hidden;transform:translateX(0)}.flip.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-webkit-animation-duration:175ms;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-moz-animation-duration:175ms;transform:rotateY(-90deg) scale(.9);animation-name:flipouttoleft;animation-duration:175ms}.flip.in{-webkit-animation-name:flipintoright;-webkit-animation-duration:225ms;-moz-animation-name:flipintoright;-moz-animation-duration:225ms;animation-name:flipintoright;animation-duration:225ms}.flip.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright;transform:rotateY(90deg) scale(.9);animation-name:flipouttoright}.flip.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft;animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@keyframes flipouttoleft{from{transform:rotateY(0)}to{transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@keyframes flipouttoright{from{transform:rotateY(0)}to{transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@keyframes flipintoleft{from{transform:rotateY(-90deg) scale(.9)}to{transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@keyframes flipintoright{from{transform:rotateY(90deg) scale(.9)}to{transform:rotateY(0)}}.viewport-turn{-webkit-perspective:200px;-moz-perspective:200px;-ms-perspective:200px;perspective:200px;position:absolute}.turn{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-webkit-transform-origin:0;-moz-backface-visibility:hidden;-moz-transform:translateX(0);-moz-transform-origin:0;backface-visibility:hidden;transform:translateX(0);transform-origin:0}.turn.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-webkit-animation-duration:125ms;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-moz-animation-duration:125ms;transform:rotateY(-90deg) scale(.9);animation-name:flipouttoleft;animation-duration:125ms}.turn.in{-webkit-animation-name:flipintoright;-webkit-animation-duration:250ms;-moz-animation-name:flipintoright;-moz-animation-duration:250ms;animation-name:flipintoright;animation-duration:250ms}.turn.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright;transform:rotateY(90deg) scale(.9);animation-name:flipouttoright}.turn.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft;animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@keyframes flipouttoleft{from{transform:rotateY(0)}to{transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@keyframes flipouttoright{from{transform:rotateY(0)}to{transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@keyframes flipintoleft{from{transform:rotateY(-90deg) scale(.9)}to{transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@keyframes flipintoright{from{transform:rotateY(90deg) scale(.9)}to{transform:rotateY(0)}}.flow{-webkit-transform-origin:50% 30%;-webkit-box-shadow:0 0 20px rgba(0,0,0,.4);-moz-transform-origin:50% 30%;-moz-box-shadow:0 0 20px rgba(0,0,0,.4);transform-origin:50% 30%;box-shadow:0 0 20px rgba(0,0,0,.4)}.ui-dialog.flow{-webkit-transform-origin:none;-webkit-box-shadow:none;-moz-transform-origin:none;-moz-box-shadow:none;transform-origin:none;box-shadow:none}.flow.out{-webkit-transform:translateX(-100%) scale(.7);-webkit-animation-name:flowouttoleft;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(-100%) scale(.7);-moz-animation-name:flowouttoleft;-moz-animation-timing-function:ease;-moz-animation-duration:350ms;transform:translateX(-100%) scale(.7);animation-name:flowouttoleft;animation-timing-function:ease;animation-duration:350ms}.flow.in{-webkit-transform:translateX(0) scale(1);-webkit-animation-name:flowinfromright;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(0) scale(1);-moz-animation-name:flowinfromright;-moz-animation-timing-function:ease;-moz-animation-duration:350ms;transform:translateX(0) scale(1);animation-name:flowinfromright;animation-timing-function:ease;animation-duration:350ms}.flow.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:flowouttoright;-moz-transform:translateX(100%);-moz-animation-name:flowouttoright;transform:translateX(100%);animation-name:flowouttoright}.flow.in.reverse{-webkit-animation-name:flowinfromleft;-moz-animation-name:flowinfromleft;animation-name:flowinfromleft}@-webkit-keyframes flowouttoleft{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(-100%) scale(.7)}}@-moz-keyframes flowouttoleft{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(-100%) scale(.7)}}@keyframes flowouttoleft{0%{transform:translateX(0) scale(1)}60%,70%{transform:translateX(0) scale(.7)}100%{transform:translateX(-100%) scale(.7)}}@-webkit-keyframes flowouttoright{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(100%) scale(.7)}}@-moz-keyframes flowouttoright{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(100%) scale(.7)}}@keyframes flowouttoright{0%{transform:translateX(0) scale(1)}60%,70%{transform:translateX(0) scale(.7)}100%{transform:translateX(100%) scale(.7)}}@-webkit-keyframes flowinfromleft{0%{-webkit-transform:translateX(-100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromleft{0%{-moz-transform:translateX(-100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}@keyframes flowinfromleft{0%{transform:translateX(-100%) scale(.7)}30%,40%{transform:translateX(0) scale(.7)}100%{transform:translateX(0) scale(1)}}@-webkit-keyframes flowinfromright{0%{-webkit-transform:translateX(100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromright{0%{-moz-transform:translateX(100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}@keyframes flowinfromright{0%{transform:translateX(100%) scale(.7)}30%,40%{transform:translateX(0) scale(.7)}100%{transform:translateX(0) scale(1)}}.ui-field-contain,.ui-mobile fieldset.ui-field-contain{display:block;position:relative;overflow:visible;clear:both;padding:.8em 0}.ui-field-contain>label~[class*=ui-],.ui-field-contain .ui-controlgroup-controls{margin:0}.ui-field-contain:last-child{border-bottom-width:0}@media (min-width:28em){.ui-field-contain,.ui-mobile fieldset.ui-field-contain{padding:0;margin:1em 0;border-bottom-width:0}.ui-field-contain:before,.ui-field-contain:after{content:"";display:table}.ui-field-contain:after{clear:both}.ui-field-contain>label,.ui-field-contain .ui-controlgroup-label,.ui-field-contain>.ui-rangeslider>label{float:left;width:20%;margin:.5em 2% 0 0}.ui-popup .ui-field-contain>label,.ui-popup .ui-field-contain .ui-controlgroup-label,.ui-popup .ui-field-contain>.ui-rangeslider>label{float:none;width:auto;margin:0 0 .4em}.ui-field-contain>label~[class*=ui-],.ui-field-contain .ui-controlgroup-controls{float:left;width:78%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ui-hide-label>label~[class*=ui-],.ui-hide-label .ui-controlgroup-controls,.ui-popup .ui-field-contain>label~[class*=ui-],.ui-popup .ui-field-contain .ui-controlgroup-controls{float:none;width:100%}.ui-field-contain>label~.ui-btn-inline{width:auto;margin-right:.625em}.ui-field-contain>label~.ui-btn-inline.ui-btn-icon-notext{width:1.75em}}.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d,.ui-grid-solo{overflow:hidden}.ui-block-a,.ui-block-b,.ui-block-c,.ui-block-d,.ui-block-e{margin:0;padding:0;border:0;float:left;min-height:1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ui-block-a{clear:left}ul.ui-grid-a,ul.ui-grid-b,ul.ui-grid-c,ul.ui-grid-d,ul.ui-grid-solo,li.ui-block-a,li.ui-block-b,li.ui-block-c,li.ui-block-d,li.ui-block-e{margin-left:0;margin-right:0;padding:0;list-style:none}[class*=ui-block-]>button.ui-btn{margin-right:0;margin-left:0}[class*=ui-block-]>.ui-btn,[class*=ui-block-]>.ui-select,[class*=ui-block-]>.ui-checkbox,[class*=ui-block-]>.ui-radio,[class*=ui-block-]>button.ui-btn-inline,[class*=ui-block-]>button.ui-btn-icon-notext,.ui-header [class*=ui-block-]>button.ui-btn,.ui-footer [class*=ui-block-]>button.ui-btn{margin-right:.3125em;margin-left:.3125em}.ui-grid-a>.ui-block-a,.ui-grid-a>.ui-block-b{width:50%}.ui-grid-b>.ui-block-a,.ui-grid-b>.ui-block-b,.ui-grid-b>.ui-block-c{width:33.333%}.ui-grid-c>.ui-block-a,.ui-grid-c>.ui-block-b,.ui-grid-c>.ui-block-c,.ui-grid-c>.ui-block-d{width:25%}.ui-grid-d>.ui-block-a,.ui-grid-d>.ui-block-b,.ui-grid-d>.ui-block-c,.ui-grid-d>.ui-block-d,.ui-grid-d>.ui-block-e{width:20%}.ui-grid-solo>.ui-block-a{width:100%;float:none}@media (max-width:35em){.ui-responsive>.ui-block-a,.ui-responsive>.ui-block-b,.ui-responsive>.ui-block-c,.ui-responsive>.ui-block-d,.ui-responsive>.ui-block-e{width:100%;float:none}}.ui-header-fixed,.ui-footer-fixed{left:0;right:0;width:100%;position:fixed;z-index:1000}.ui-header-fixed{top:-1px;padding-top:1px}.ui-header-fixed.ui-fixed-hidden{top:0;padding-top:0}.ui-header-fixed .ui-btn-left,.ui-header-fixed .ui-btn-right{margin-top:1px}.ui-header-fixed.ui-fixed-hidden .ui-btn-left,.ui-header-fixed.ui-fixed-hidden .ui-btn-right{margin-top:0}.ui-footer-fixed{bottom:-1px;padding-bottom:1px}.ui-footer-fixed.ui-fixed-hidden{bottom:0;padding-bottom:0}.ui-header-fullscreen,.ui-footer-fullscreen{filter:Alpha(Opacity=90);opacity:.9}.ui-page-header-fixed{padding-top:2.8125em}.ui-page-footer-fixed{padding-bottom:2.8125em}.ui-page-header-fullscreen>.ui-content,.ui-page-footer-fullscreen>.ui-content{padding:0}.ui-fixed-hidden{position:absolute}.ui-footer-fixed.ui-fixed-hidden{display:none}.ui-page .ui-footer-fixed.ui-fixed-hidden{display:block}.ui-page-header-fullscreen .ui-fixed-hidden,.ui-page-footer-fullscreen .ui-fixed-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-header-fixed .ui-btn,.ui-footer-fixed .ui-btn{z-index:10}.ui-android-2x-fixed .ui-li-has-thumb{-webkit-transform:translate3d(0,0,0)}.ui-navbar{max-width:100%}.ui-navbar ul:before,.ui-navbar ul:after{content:"";display:table}.ui-navbar ul:after{clear:both}.ui-navbar ul{list-style:none;margin:0;padding:0;position:relative;display:block;border:0;max-width:100%;overflow:visible}.ui-navbar li .ui-btn{font-size:12.5px;display:block;margin:0;border-right-width:0}.ui-header .ui-navbar li button.ui-btn,.ui-footer .ui-navbar li button.ui-btn{margin:0;width:100%}.ui-navbar .ui-btn:focus{z-index:1}.ui-navbar li:last-child .ui-btn{margin-right:-4px}.ui-navbar li:last-child .ui-btn:after{margin-right:4px}.ui-content .ui-navbar li:last-child .ui-btn,.ui-content .ui-navbar .ui-grid-duo .ui-block-b .ui-btn{border-right-width:1px;margin-right:0}.ui-content .ui-navbar li:last-child .ui-btn:after,.ui-content .ui-navbar .ui-grid-duo .ui-block-b .ui-btn:after{margin-right:0}.ui-navbar .ui-grid-duo .ui-block-a:last-child .ui-btn{border-right-width:1px;margin-right:-1px}.ui-navbar .ui-grid-duo .ui-block-a:last-child .ui-btn:after{margin-right:1px}.ui-navbar .ui-grid-duo .ui-btn{border-top-width:0}.ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn,.ui-navbar .ui-grid-duo .ui-block-a:first-child+.ui-block-b .ui-btn{border-top-width:1px}.ui-header .ui-navbar .ui-btn,.ui-footer .ui-navbar .ui-btn{border-top-width:0;border-bottom-width:0}.ui-header .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn,.ui-footer .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn,.ui-header .ui-navbar .ui-grid-duo .ui-block-a:first-child+.ui-block-b .ui-btn,.ui-footer .ui-navbar .ui-grid-duo .ui-block-a:first-child+.ui-block-b .ui-btn{border-top-width:0}.ui-header .ui-title~.ui-navbar .ui-btn,.ui-footer .ui-title~.ui-navbar .ui-btn,.ui-header .ui-navbar .ui-grid-duo .ui-btn,.ui-footer .ui-navbar .ui-grid-duo .ui-btn,.ui-header .ui-title~.ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn,.ui-footer .ui-title~.ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn,.ui-header .ui-title~.ui-navbar .ui-grid-duo .ui-block-a:first-child+.ui-block-b .ui-btn,.ui-footer .ui-title~.ui-navbar .ui-grid-duo .ui-block-a:first-child+.ui-block-b .ui-btn{border-top-width:1px}.ui-input-btn input{position:absolute;top:0;left:0;width:100%;height:100%;padding:0;border:0;outline:0;-webkit-border-radius:inherit;border-radius:inherit;-webkit-appearance:none;-moz-appearance:none;cursor:pointer;background:#fff;background:rgba(255,255,255,0);filter:Alpha(Opacity=0);opacity:.1;font-size:1px;text-indent:-9999px;z-index:2}.ui-input-btn.ui-state-disabled input{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-collapsible{margin:0 -1em}.ui-collapsible-inset,.ui-collapsible-set{margin:.5em 0}.ui-collapsible-heading{display:block;margin:0;padding:0;position:relative}.ui-collapsible-heading .ui-btn{text-align:left;margin:0;border-left-width:0;border-right-width:0}.ui-collapsible-heading .ui-btn-icon-top,.ui-collapsible-heading .ui-btn-icon-bottom{text-align:center}.ui-collapsible-inset .ui-collapsible-heading .ui-btn{border-right-width:1px;border-left-width:1px}.ui-collapsible-collapsed+.ui-collapsible:not(.ui-collapsible-inset)>.ui-collapsible-heading .ui-btn{border-top-width:0}.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn{border-top-width:1px}.ui-collapsible-heading-status{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-collapsible-content{display:block;margin:0;padding:.5em 1em}.ui-collapsible-themed-content .ui-collapsible-content{border-left-width:0;border-right-width:0;border-top-width:0;border-bottom-width:1px;border-style:solid}.ui-collapsible-inset.ui-collapsible-themed-content .ui-collapsible-content{border-left-width:1px;border-right-width:1px}.ui-collapsible-inset .ui-collapsible-content{margin:0}.ui-collapsible-content-collapsed{display:none}.ui-collapsible-set>.ui-collapsible.ui-corner-all{-webkit-border-radius:0;border-radius:0}.ui-collapsible-heading,.ui-collapsible-heading>.ui-btn{-webkit-border-radius:inherit;border-radius:inherit}.ui-collapsible-set .ui-collapsible.ui-first-child{-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit;-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit}.ui-collapsible-content,.ui-collapsible-set .ui-collapsible.ui-last-child{-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit;-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit}.ui-collapsible-themed-content:not(.ui-collapsible-collapsed)>.ui-collapsible-heading{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-collapsible-set .ui-collapsible{margin:-1px -1em 0}.ui-collapsible-set .ui-collapsible-inset{margin:-1px 0 0}.ui-collapsible-set .ui-collapsible.ui-first-child{margin-top:0}.ui-controlgroup,fieldset.ui-controlgroup{padding:0;margin:.5em 0}.ui-field-contain .ui-controlgroup,.ui-field-contain fieldset.ui-controlgroup{margin:0}.ui-mini .ui-controlgroup-label{font-size:16px}.ui-controlgroup.ui-mini .ui-btn-icon-notext,.ui-controlgroup .ui-mini.ui-btn-icon-notext{font-size:inherit}.ui-controlgroup-controls .ui-btn,.ui-controlgroup-controls .ui-checkbox,.ui-controlgroup-controls .ui-radio,.ui-controlgroup-controls .ui-select{margin:0}.ui-controlgroup-controls .ui-btn:focus,.ui-controlgroup-controls .ui-btn.ui-focus{z-index:1}.ui-controlgroup-controls li{list-style:none}.ui-controlgroup-horizontal .ui-controlgroup-controls{display:inline-block;vertical-align:middle}.ui-controlgroup-horizontal .ui-controlgroup-controls:before,.ui-controlgroup-horizontal .ui-controlgroup-controls:after{content:"";display:table}.ui-controlgroup-horizontal .ui-controlgroup-controls:after{clear:both}.ui-controlgroup-horizontal .ui-controlgroup-controls>.ui-btn,.ui-controlgroup-horizontal .ui-controlgroup-controls li>.ui-btn,.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox,.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio,.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select{float:left;clear:none}.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn,.ui-controlgroup-controls .ui-btn-icon-notext{width:auto}.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn-icon-notext,.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn-icon-notext{width:1.5em}.ui-controlgroup-controls .ui-btn-icon-notext{height:auto;padding:.7em 1em}.ui-controlgroup-vertical .ui-controlgroup-controls .ui-btn{border-bottom-width:0}.ui-controlgroup-vertical .ui-controlgroup-controls .ui-btn.ui-last-child{border-bottom-width:1px}.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn{border-right-width:0}.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn.ui-last-child{border-right-width:1px}.ui-controlgroup-controls .ui-btn-corner-all,.ui-controlgroup-controls .ui-btn.ui-corner-all{-webkit-border-radius:0;border-radius:0}.ui-controlgroup-controls,.ui-controlgroup-controls .ui-radio,.ui-controlgroup-controls .ui-checkbox,.ui-controlgroup-controls .ui-select,.ui-controlgroup-controls li{-webkit-border-radius:inherit;border-radius:inherit}.ui-controlgroup-vertical .ui-btn.ui-first-child{-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit;-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit}.ui-controlgroup-vertical .ui-btn.ui-last-child{-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit;-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-controlgroup-horizontal .ui-btn.ui-first-child{-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit;-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit}.ui-controlgroup-horizontal .ui-btn.ui-last-child{-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit;-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-controlgroup-controls a.ui-shadow:not(:focus),.ui-controlgroup-controls button.ui-shadow:not(:focus),.ui-controlgroup-controls div.ui-shadow:not(.ui-focus){-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.ui-controlgroup-label legend{max-width:100%}.ui-controlgroup-controls>label{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-dialog{background:none!important}.ui-dialog-contain{width:92.5%;max-width:500px;margin:10% auto 1em;padding:0;position:relative;top:-1em}.ui-dialog-contain>.ui-header,.ui-dialog-contain>.ui-content,.ui-dialog-contain>.ui-footer{display:block;position:relative;width:auto;margin:0}.ui-dialog-contain>.ui-header{overflow:hidden;z-index:10;padding:0;border-top-width:0}.ui-dialog-contain>.ui-footer{z-index:10;padding:0 1em;border-bottom-width:0}.ui-popup-open .ui-header-fixed,.ui-popup-open .ui-footer-fixed{position:absolute!important}.ui-popup-screen{background-image:url("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==");top:0;left:0;right:0;bottom:1px;position:absolute;filter:Alpha(Opacity=0);opacity:0;z-index:1099}.ui-popup-screen.in{opacity:.5;filter:Alpha(Opacity=50)}.ui-popup-screen.out{opacity:0;filter:Alpha(Opacity=0)}.ui-popup-container{z-index:1100;display:inline-block;position:absolute;padding:0;outline:0}.ui-popup{position:relative}.ui-popup.ui-body-inherit{border-width:1px;border-style:solid}.ui-popup-hidden{left:0;top:0;position:absolute!important;visibility:hidden}.ui-popup-truncate{height:1px;width:1px;margin:-1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-popup.ui-content,.ui-popup .ui-content{overflow:visible}.ui-popup>.ui-header{border-top-width:0}.ui-popup>.ui-footer{border-bottom-width:0}.ui-popup>p,.ui-popup>h1,.ui-popup>h2,.ui-popup>h3,.ui-popup>h4,.ui-popup>h5,.ui-popup>h6{margin:.5em .4375em}.ui-popup>span{display:block;margin:.5em .4375em}.ui-popup-container .ui-content>p,.ui-popup-container .ui-content>h1,.ui-popup-container .ui-content>h2,.ui-popup-container .ui-content>h3,.ui-popup-container .ui-content>h4,.ui-popup-container .ui-content>h5,.ui-popup-container .ui-content>h6{margin:.5em 0}.ui-popup-container .ui-content>span{margin:0}.ui-popup-container .ui-content>p:first-child,.ui-popup-container .ui-content>h1:first-child,.ui-popup-container .ui-content>h2:first-child,.ui-popup-container .ui-content>h3:first-child,.ui-popup-container .ui-content>h4:first-child,.ui-popup-container .ui-content>h5:first-child,.ui-popup-container .ui-content>h6:first-child{margin-top:0}.ui-popup-container .ui-content>p:last-child,.ui-popup-container .ui-content>h1:last-child,.ui-popup-container .ui-content>h2:last-child,.ui-popup-container .ui-content>h3:last-child,.ui-popup-container .ui-content>h4:last-child,.ui-popup-container .ui-content>h5:last-child,.ui-popup-container .ui-content>h6:last-child{margin-bottom:0}.ui-popup>img{max-width:100%;max-height:100%;vertical-align:middle}.ui-popup:not(.ui-content)>img:only-child,.ui-popup:not(.ui-content)>.ui-btn-left:first-child+img:last-child,.ui-popup:not(.ui-content)>.ui-btn-right:first-child+img:last-child{-webkit-border-radius:inherit;border-radius:inherit}.ui-popup iframe{vertical-align:middle}.ui-popup>.ui-btn-left,.ui-popup>.ui-btn-right{position:absolute;top:-11px;margin:0;z-index:1101}.ui-popup>.ui-btn-left{left:-11px}.ui-popup>.ui-btn-right{right:-11px}.ui-popup-arrow-container{width:20px;height:20px}.ui-popup-arrow-container.ui-popup-arrow-l{left:-10px;clip:rect(-1000px,10px,2000px,-1000px)}.ui-popup-arrow-container.ui-popup-arrow-t{top:-10px;clip:rect(-1000px,2000px,10px,-1000px)}.ui-popup-arrow-container.ui-popup-arrow-r{right:-10px;clip:rect(-1000px,2000px,2000px,10px)}.ui-popup-arrow-container.ui-popup-arrow-b{bottom:-10px;clip:rect(10px,2000px,1000px,-1000px)}.ui-popup-arrow-container .ui-popup-arrow{width:28.284271247px;height:28.284271247px;border-width:1px;border-style:solid}.ui-popup-arrow-container.ui-popup-arrow-t .ui-popup-arrow{left:-4.142135623px;top:5.857864376px}.ui-popup-arrow-container.ui-popup-arrow-b .ui-popup-arrow{left:-4.142135623px;top:-14.142135623px}.ui-popup-arrow-container.ui-popup-arrow-l .ui-popup-arrow{left:5.857864376px;top:-4.142135623px}.ui-popup-arrow-container.ui-popup-arrow-r .ui-popup-arrow{left:-14.142135623px;top:-4.142135623px}.ui-popup-arrow-container.ui-popup-arrow-t.ie .ui-popup-arrow{margin-left:-5.857864376269049px;margin-top:-7.0710678118654755px}.ui-popup-arrow-container.ui-popup-arrow-b.ie .ui-popup-arrow{margin-left:-5.857864376269049px;margin-top:-4.142135623730951px}.ui-popup-arrow-container.ui-popup-arrow-l.ie .ui-popup-arrow{margin-left:-7.0710678118654755px;margin-top:-5.857864376269049px}.ui-popup-arrow-container.ui-popup-arrow-r.ie .ui-popup-arrow{margin-left:-4.142135623730951px;margin-top:-5.857864376269049px}.ui-popup>.ui-popup-arrow-guide{position:absolute;left:0;right:0;top:0;bottom:0;visibility:hidden}.ui-popup-arrow-container{position:absolute}.ui-popup-arrow{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);position:absolute;overflow:hidden;box-sizing:border-box}.ui-popup-arrow-container.ie .ui-popup-arrow{-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865474, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865474, SizingMethod='auto expand')";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.7071067811865474, M12=-.7071067811865477, M21=.7071067811865477, M22=.7071067811865474, SizingMethod='auto expand')}.ui-checkbox,.ui-radio{margin:.5em 0;position:relative}.ui-checkbox .ui-btn,.ui-radio .ui-btn{margin:0;text-align:left;white-space:normal;z-index:2}.ui-controlgroup .ui-checkbox .ui-btn.ui-focus,.ui-controlgroup .ui-radio .ui-btn.ui-focus{z-index:3}.ui-checkbox .ui-btn-icon-top,.ui-radio .ui-btn-icon-top,.ui-checkbox .ui-btn-icon-bottom,.ui-radio .ui-btn-icon-bottom{text-align:center}.ui-controlgroup-horizontal .ui-checkbox .ui-btn:after,.ui-controlgroup-horizontal .ui-radio .ui-btn:after{content:none;display:none}.ui-checkbox input,.ui-radio input{position:absolute;left:.466em;top:50%;width:22px;height:22px;margin:-11px 0 0 0;outline:0!important;z-index:1}.ui-controlgroup-horizontal .ui-checkbox input,.ui-controlgroup-horizontal .ui-radio input{left:50%;margin-left:-9px}.ui-checkbox input:disabled,.ui-radio input:disabled{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-select{margin-top:.5em;margin-bottom:.5em;position:relative}.ui-select>select{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-select .ui-btn{margin:0;opacity:1}.ui-select .ui-btn select{position:absolute;top:0;left:0;width:100%;min-height:1.5em;min-height:100%;height:3em;max-height:100%;outline:0;-webkit-border-radius:inherit;border-radius:inherit;-webkit-appearance:none;-moz-appearance:none;cursor:pointer;filter:Alpha(Opacity=0);opacity:0;z-index:2}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:.0001}}.ui-select .ui-state-disabled select{display:none}.ui-select span.ui-state-disabled{filter:Alpha(Opacity=100);opacity:1}.ui-select .ui-btn.ui-select-nativeonly{border-radius:0;border:0}.ui-select .ui-btn.ui-select-nativeonly select{opacity:1;text-indent:0;display:block}.ui-select .ui-li-has-count.ui-btn{padding-right:2.8125em}.ui-select .ui-li-has-count.ui-btn-icon-right{padding-right:4.6875em}.ui-select .ui-btn-icon-right .ui-li-count{right:3.2em}.ui-select .ui-btn>span:not(.ui-li-count){display:block;text-overflow:ellipsis;overflow:hidden!important;white-space:nowrap}.ui-selectmenu.ui-popup{min-width:11em}.ui-selectmenu .ui-dialog-contain{overflow:hidden}.ui-selectmenu .ui-header{margin:0;padding:0;border-width:0}.ui-selectmenu.ui-dialog .ui-header{z-index:1;position:relative}.ui-selectmenu.ui-popup .ui-header{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-selectmenu.ui-popup .ui-header h1:after{content:'.';visibility:hidden}.ui-selectmenu .ui-header .ui-title{margin:0 2.875em}.ui-selectmenu.ui-dialog .ui-content{overflow:visible;z-index:1}.ui-selectmenu .ui-selectmenu-list{margin:0;-webkit-border-radius:inherit;border-radius:inherit}.ui-header:not(.ui-screen-hidden)+.ui-selectmenu-list{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0}.ui-header.ui-screen-hidden+.ui-selectmenu-list li.ui-first-child .ui-btn{border-top-width:0}.ui-selectmenu .ui-selectmenu-list li.ui-last-child .ui-btn{border-bottom-width:0}.ui-selectmenu .ui-btn.ui-li-divider{cursor:default}.ui-selectmenu .ui-selectmenu-placeholder{display:none}.ui-listview,.ui-listview>li{margin:0;padding:0;list-style:none}.ui-content .ui-listview,.ui-panel-inner>.ui-listview{margin:-1em}.ui-content .ui-listview-inset,.ui-panel-inner>.ui-listview-inset{margin:1em 0}.ui-collapsible-content>.ui-listview{margin:-.5em -1em}.ui-collapsible-content>.ui-listview-inset{margin:.5em 0}.ui-listview>li{display:block;position:relative;overflow:visible}.ui-listview>.ui-li-static,.ui-listview>.ui-li-divider,.ui-listview>li>a.ui-btn{margin:0;display:block;position:relative;text-align:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-listview>li>.ui-btn:focus{z-index:1}.ui-listview>.ui-li-static,.ui-listview>.ui-li-divider,.ui-listview>li>a.ui-btn{border-width:1px 0 0;border-style:solid}.ui-listview-inset>.ui-li-static,.ui-listview-inset>.ui-li-divider,.ui-listview-inset>li>a.ui-btn{border-right-width:1px;border-left-width:1px}.ui-listview>.ui-li-static.ui-last-child,.ui-listview>.ui-li-divider.ui-last-child,.ui-listview>li.ui-last-child>a.ui-btn{border-bottom-width:1px}.ui-collapsible-content>.ui-listview:not(.ui-listview-inset)>li.ui-first-child,.ui-collapsible-content>.ui-listview:not(.ui-listview-inset)>li.ui-first-child>a.ui-btn{border-top-width:0}.ui-collapsible-themed-content .ui-listview:not(.ui-listview-inset)>li.ui-last-child,.ui-collapsible-themed-content .ui-listview:not(.ui-listview-inset)>li.ui-last-child>a.ui-btn{border-bottom-width:0}.ui-listview>li.ui-first-child,.ui-listview>li.ui-first-child>a.ui-btn{-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit;-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit}.ui-listview>li.ui-last-child,.ui-listview>li.ui-last-child>a.ui-btn{-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit;-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit}.ui-listview>li.ui-li-has-alt>a.ui-btn{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-listview>li.ui-first-child>a.ui-btn+a.ui-btn{-webkit-border-top-left-radius:0;border-top-left-radius:0;-webkit-border-top-right-radius:inherit;border-top-right-radius:inherit}.ui-listview>li.ui-last-child>a.ui-btn+a.ui-btn{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:inherit;border-bottom-right-radius:inherit}.ui-listview>li.ui-first-child img:first-child:not(.ui-li-icon){-webkit-border-top-left-radius:inherit;border-top-left-radius:inherit}.ui-listview>li.ui-last-child img:first-child:not(.ui-li-icon){-webkit-border-bottom-left-radius:inherit;border-bottom-left-radius:inherit}.ui-collapsible-content>.ui-listview:not(.ui-listview-inset){-webkit-border-radius:inherit;border-radius:inherit}.ui-listview>.ui-li-static{padding:.7em 1em}.ui-listview>.ui-li-divider{padding:.5em 1.143em;font-size:14px;font-weight:700;cursor:default;outline:0}.ui-listview>.ui-li-has-count>.ui-btn,.ui-listview>.ui-li-static.ui-li-has-count,.ui-listview>.ui-li-divider.ui-li-has-count{padding-right:2.8125em}.ui-listview>.ui-li-has-count>.ui-btn-icon-right{padding-right:4.6875em}.ui-listview>.ui-li-has-thumb>.ui-btn,.ui-listview>.ui-li-static.ui-li-has-thumb{min-height:3.625em;padding-left:6.25em}.ui-listview>.ui-li-has-icon>.ui-btn,.ui-listview>.ui-li-static.ui-li-has-icon{min-height:1.25em;padding-left:2.5em}.ui-li-count{position:absolute;font-size:12.5px;font-weight:700;text-align:center;border-width:1px;border-style:solid;padding:0 .48em;line-height:1.6em;min-height:1.6em;min-width:.64em;right:.8em;top:50%;margin-top:-.88em}.ui-listview .ui-btn-icon-right .ui-li-count{right:3.2em}.ui-listview .ui-li-has-thumb>img:first-child,.ui-listview .ui-li-has-thumb>.ui-btn>img:first-child,.ui-listview .ui-li-has-thumb .ui-li-thumb{position:absolute;left:0;top:0;max-height:5em;max-width:5em}.ui-listview>.ui-li-has-icon>img:first-child,.ui-listview>.ui-li-has-icon>.ui-btn>img:first-child{position:absolute;left:.625em;top:.9em;max-height:1em;max-width:1em}.ui-listview>li h1,.ui-listview>li h2,.ui-listview>li h3,.ui-listview>li h4,.ui-listview>li h5,.ui-listview>li h6{font-size:1em;font-weight:700;display:block;margin:.45em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-listview>li p{font-size:.75em;font-weight:400;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-listview .ui-li-aside{position:absolute;top:1em;right:3.333em;margin:0;text-align:right}.ui-listview>li.ui-li-has-alt>.ui-btn{margin-right:2.5em;border-right-width:0}.ui-listview>li.ui-li-has-alt>.ui-btn+.ui-btn{position:absolute;width:2.5em;height:100%;min-height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-left-width:1px;top:0;right:0;margin:0;padding:0;z-index:2}.ui-listview-inset>li.ui-li-has-alt>.ui-btn+.ui-btn{border-right-width:1px}.ui-listview>li.ui-li-has-alt>.ui-btn+.ui-btn:focus{z-index:3}ol.ui-listview,ol.ui-listview>.ui-li-divider{counter-reset:listnumbering}ol.ui-listview>li>.ui-btn,ol.ui-listview>li.ui-li-static{vertical-align:middle}ol.ui-listview>li>.ui-btn:first-child:before,ol.ui-listview>li.ui-li-static:before,ol.ui-listview>li.ui-field-contain>label:before,ol.ui-listview>li.ui-field-contain>.ui-controlgroup-label:before{display:inline-block;font-size:.9em;font-weight:400;padding-right:.3em;min-width:1.4em;line-height:1.5;vertical-align:middle;counter-increment:listnumbering;content:counter(listnumbering) "."}ol.ui-listview>li.ui-field-contain:before{content:none;display:none}ol.ui-listview>li h1:first-child,ol.ui-listview>li h2:first-child,ol.ui-listview>li h3:first-child,ol.ui-listview>li h4:first-child,ol.ui-listview>li h5:first-child,ol.ui-listview>li h6:first-child,ol.ui-listview>li p:first-child,ol.ui-listview>li img:first-child+*{display:inline-block;vertical-align:middle}ol.ui-listview>li h1:first-child~*,ol.ui-listview>li h2:first-child~*,ol.ui-listview>li h3:first-child~*,ol.ui-listview>li h4:first-child~*,ol.ui-listview>li h5:first-child~*,ol.ui-listview>li h6:first-child~*,ol.ui-listview>li p:first-child~*,ol.ui-listview>li img:first-child+*~*{margin-top:0;text-indent:2.04em}html .ui-filterable+.ui-listview,html .ui-filterable.ui-listview{margin-top:.5em}.ui-collapsible-content>form.ui-filterable{margin-top:-.5em}.ui-collapsible-content>.ui-input-search.ui-filterable{margin-top:0}.ui-collapsible-content>.ui-filterable+.ui-listview:not(.ui-listview-inset)>li.ui-first-child,.ui-collapsible-content>.ui-filterable+.ui-listview:not(.ui-listview-inset)>li.ui-first-child>a.ui-btn,.ui-collapsible-content>.ui-filterable.ui-listview:not(.ui-listview-inset)>li.ui-first-child,.ui-collapsible-content>.ui-filterable.ui-listview:not(.ui-listview-inset)>li.ui-first-child>a.ui-btn{border-top-width:1px}div.ui-slider{height:30px;margin:.5em 0;padding:0;-ms-touch-action:pan-y pinch-zoom double-tap-zoom}div.ui-slider:before,div.ui-slider:after{content:"";display:table}div.ui-slider:after{clear:both}input.ui-slider-input{display:block;float:left;font-size:14px;font-weight:700;margin:0;padding:4px;width:40px;height:20px;line-height:20px;border-width:1px;border-style:solid;outline:0;text-align:center;vertical-align:text-bottom;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ui-slider-input::-webkit-outer-spin-button,.ui-slider-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.ui-slider-track{position:relative;overflow:visible;border-width:1px;border-style:solid;height:15px;margin:0 15px 0 68px;top:6px}.ui-slider-track.ui-mini{height:12px;top:8px}.ui-slider-track .ui-slider-bg{height:100%}.ui-slider-track .ui-btn.ui-slider-handle{position:absolute;z-index:1;top:50%;width:28px;height:28px;margin:-15px 0 0 -15px;outline:0;padding:0}.ui-slider-track.ui-mini .ui-slider-handle{height:14px;width:14px;margin:-8px 0 0 -8px}select.ui-slider-switch{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}div.ui-slider-switch{display:inline-block;height:32px;width:5.8em;top:0}div.ui-slider-switch:before,div.ui-slider-switch:after{display:none;clear:none}div.ui-slider-switch.ui-mini{height:29px;top:0}.ui-slider-inneroffset{margin:0 16px;position:relative;z-index:1}.ui-slider-switch.ui-mini .ui-slider-inneroffset{margin:0 15px 0 14px}.ui-slider-switch .ui-btn.ui-slider-handle{margin:1px 0 0 -15px}.ui-slider-switch.ui-mini .ui-slider-handle{width:25px;height:25px;margin:1px 0 0 -13px;padding:0}.ui-slider-handle-snapping{-webkit-transition:left 70ms linear;-moz-transition:left 70ms linear;transition:left 70ms linear}.ui-slider-switch .ui-slider-label{position:absolute;text-align:center;width:100%;overflow:hidden;font-size:16px;top:0;line-height:2;min-height:100%;white-space:nowrap;cursor:pointer}.ui-slider-switch.ui-mini .ui-slider-label{font-size:14px}.ui-slider-switch .ui-slider-label-a{z-index:1;left:0;text-indent:-1.5em}.ui-slider-switch .ui-slider-label-b{z-index:0;right:0;text-indent:1.5em}.ui-slider-track .ui-slider-bg,.ui-slider-switch .ui-slider-label,.ui-slider-switch .ui-slider-inneroffset,.ui-slider-handle{-webkit-border-radius:inherit;border-radius:inherit}.ui-field-contain div.ui-slider-switch{margin:0}.ui-field-contain div.ui-slider-switch,.ui-field-contain.ui-hide-label div.ui-slider-switch,html .ui-popup .ui-field-contain div.ui-slider-switch{display:inline-block;width:5.8em}.ui-slider-popup{width:64px;height:64px;font-size:36px;padding-top:14px;opacity:.8}.ui-slider-popup{position:absolute!important;text-align:center;z-index:100}.ui-slider-track .ui-btn.ui-slider-handle{font-size:.9em;line-height:30px}.ui-rangeslider{margin:.5em 0}.ui-rangeslider:before,.ui-rangeslider:after{content:"";display:table}.ui-rangeslider:after{clear:both}.ui-rangeslider .ui-slider-input.ui-rangeslider-last{float:right}.ui-rangeslider .ui-rangeslider-sliders{position:relative;overflow:visible;height:30px;margin:0 68px}.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track{position:absolute;top:6px;right:0;left:0;margin:0}.ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track{top:8px}.ui-rangeslider .ui-slider-track:first-child .ui-slider-bg{display:none}.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child{background-color:transparent;background:0;border-width:0;height:0}html >body .ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child{height:15px;border-width:1px}html >body .ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track:first-child{height:12px}div.ui-rangeslider label{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.ui-field-contain .ui-rangeslider input.ui-slider-input,.ui-field-contain .ui-rangeslider.ui-mini input.ui-slider-input,.ui-field-contain .ui-rangeslider .ui-rangeslider-sliders,.ui-field-contain .ui-rangeslider.ui-mini .ui-rangeslider-sliders{margin-top:0;margin-bottom:0}.ui-input-text,.ui-input-search{margin:.5em 0;border-width:1px;border-style:solid}.ui-mini{margin:.446em}.ui-input-text input,.ui-input-search input,textarea.ui-input-text{padding:.4em;line-height:1.4em;display:block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;outline:0}.ui-input-text input,.ui-input-search input{margin:0;min-height:2.2em;text-align:left;border:0;background:transparent none;-webkit-appearance:none;-webkit-border-radius:inherit;border-radius:inherit}textarea.ui-input-text{overflow:auto;resize:vertical}.ui-mini .ui-input-text input,.ui-mini .ui-input-search input,.ui-input-text.ui-mini input,.ui-input-search.ui-mini input,.ui-mini textarea.ui-input-text,textarea.ui-mini{font-size:14px}.ui-mini textarea.ui-input-text,textarea.ui-mini{margin:.446em 0}.ui-input-has-clear,.ui-input-search{position:relative}.ui-input-has-clear{padding-right:2.375em}.ui-mini.ui-input-has-clear{padding-right:2.923em}.ui-input-has-clear input{padding-right:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-input-search input{padding-left:1.75em}.ui-input-search:after{position:absolute;left:.3125em;top:50%;margin-top:-7px;content:"";background-position:center center;background-repeat:no-repeat;width:14px;height:14px;filter:Alpha(Opacity=50);opacity:.5}.ui-input-search.ui-input-has-clear .ui-btn.ui-input-clear,.ui-input-text.ui-input-has-clear .ui-btn.ui-input-clear{position:absolute;right:0;top:50%;margin:-14px .3125em 0;border:0;background-color:transparent}.ui-input-search .ui-input-clear-hidden,.ui-input-text .ui-input-clear-hidden{display:none}.ui-input-text input::-moz-placeholder,.ui-input-search input::-moz-placeholder,textarea.ui-input-text::-moz-placeholder{color:#aaa}.ui-input-text input:-ms-input-placeholder,.ui-input-search input:-ms-input-placeholder,textarea.ui-input-text:-ms-input-placeholder{color:#aaa}.ui-input-text input[type=number]::-webkit-outer-spin-button{margin:0}.ui-input-text input::-ms-clear,.ui-input-search input::-ms-clear{display:none}.ui-input-text input:focus,.ui-input-search input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}textarea.ui-input-text.ui-textinput-autogrow{overflow:hidden}.ui-textinput-autogrow-resize{-webkit-transition:height .25s;-o-transition:height .25s;-moz-transition:height .25s;transition:height .25s}.ui-flipswitch{display:inline-block;vertical-align:middle;width:5.875em;height:1.875em;border-width:1px;border-style:solid;margin:.5em 0;overflow:hidden;-webkit-transition-property:padding,width,background-color,color,border-color;-moz-transition-property:padding,width,background-color,color,border-color;-o-transition-property:padding,width,background-color,color,border-color;transition-property:padding,width,background-color,color,border-color;-webkit-transition-duration:100ms;-moz-transition-duration:100ms;-o-transition-duration:100ms;transition-duration:100ms;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.ui-flipswitch.ui-flipswitch-active{padding-left:4em;width:1.875em}.ui-flipswitch-input{position:absolute;height:1px;width:1px;margin:-1px;overflow:hidden;clip:rect(1px,1px,1px,1px);border:0;outline:0;filter:Alpha(Opacity=0);opacity:0}.ui-flipswitch .ui-btn.ui-flipswitch-on,.ui-flipswitch .ui-flipswitch-off{float:left;height:1.75em;margin:.0625em;line-height:1.65em}.ui-flipswitch .ui-btn.ui-flipswitch-on{width:1.75em;padding:0;text-indent:-2.6em;text-align:left;border-width:1px;border-style:solid;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:inherit;overflow:visible;color:inherit;text-shadow:inherit}.ui-flipswitch .ui-flipswitch-off{padding:1px;text-indent:1em}html .ui-field-contain>label+.ui-flipswitch,html .ui-popup .ui-field-contain>label+.ui-flipswitch{display:inline-block;width:5.875em;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ui-field-contain .ui-flipswitch.ui-flipswitch-active,.ui-popup .ui-field-contain .ui-flipswitch.ui-flipswitch-active{width:1.875em}.ui-table{border:0;border-collapse:collapse;padding:0;width:100%}.ui-table th,.ui-table td{line-height:1.5em;text-align:left;padding:.4em .5em;vertical-align:top}.ui-table th .ui-btn,.ui-table td .ui-btn{line-height:normal}.ui-table th{font-weight:700}.ui-table caption{text-align:left;margin-bottom:1.4em;opacity:.5}.ui-table-columntoggle-btn{float:right;margin-bottom:.8em}.ui-table-columntoggle-popup fieldset{margin:0}.ui-table-columntoggle{clear:both}@media only all{th.ui-table-priority-6,td.ui-table-priority-6,th.ui-table-priority-5,td.ui-table-priority-5,th.ui-table-priority-4,td.ui-table-priority-4,th.ui-table-priority-3,td.ui-table-priority-3,th.ui-table-priority-2,td.ui-table-priority-2,th.ui-table-priority-1,td.ui-table-priority-1{display:none}}@media screen and (min-width:20em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-1,.ui-table-columntoggle.ui-responsive td.ui-table-priority-1{display:table-cell}}@media screen and (min-width:30em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-2,.ui-table-columntoggle.ui-responsive td.ui-table-priority-2{display:table-cell}}@media screen and (min-width:40em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-3,.ui-table-columntoggle.ui-responsive td.ui-table-priority-3{display:table-cell}}@media screen and (min-width:50em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-4,.ui-table-columntoggle.ui-responsive td.ui-table-priority-4{display:table-cell}}@media screen and (min-width:60em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-5,.ui-table-columntoggle.ui-responsive td.ui-table-priority-5{display:table-cell}}@media screen and (min-width:70em){.ui-table-columntoggle.ui-responsive th.ui-table-priority-6,.ui-table-columntoggle.ui-responsive td.ui-table-priority-6{display:table-cell}}.ui-table-columntoggle th.ui-table-cell-hidden,.ui-table-columntoggle td.ui-table-cell-hidden,.ui-table-columntoggle.ui-responsive th.ui-table-cell-hidden,.ui-table-columntoggle.ui-responsive td.ui-table-cell-hidden{display:none}.ui-table-columntoggle th.ui-table-cell-visible,.ui-table-columntoggle td.ui-table-cell-visible,.ui-table-columntoggle.ui-responsive th.ui-table-cell-visible,.ui-table-columntoggle.ui-responsive td.ui-table-cell-visible{display:table-cell}.ui-table-reflow td .ui-table-cell-label,.ui-table-reflow th .ui-table-cell-label{display:none}@media only all{.ui-table-reflow thead td,.ui-table-reflow thead th{display:none}.ui-table-reflow td,.ui-table-reflow th{text-align:left;display:block}.ui-table-reflow tbody th{margin-top:3em}.ui-table-reflow td .ui-table-cell-label,.ui-table-reflow th .ui-table-cell-label{padding:.4em;min-width:30%;display:inline-block;margin:-.4em 1em -.4em -.4em}.ui-table-reflow th .ui-table-cell-label-top,.ui-table-reflow td .ui-table-cell-label-top{display:block;padding:.4em 0;margin:.4em 0;text-transform:uppercase;font-size:.9em;font-weight:400}}@media (min-width:35em){.ui-table-reflow.ui-responsive td,.ui-table-reflow.ui-responsive th,.ui-table-reflow.ui-responsive tbody th,.ui-table-reflow.ui-responsive tbody td,.ui-table-reflow.ui-responsive thead td,.ui-table-reflow.ui-responsive thead th{display:table-cell;margin:0}.ui-table-reflow.ui-responsive td .ui-table-cell-label,.ui-table-reflow.ui-responsive th .ui-table-cell-label{display:none}}@media (max-width:35em){.ui-table-reflow.ui-responsive td,.ui-table-reflow.ui-responsive th{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;clear:left}}.ui-panel{width:17em;min-height:100%;max-height:none;border-width:0;position:absolute;top:0;display:block}.ui-panel-closed{width:0;max-height:100%;overflow:hidden;visibility:hidden;left:0;clip:rect(1px,1px,1px,1px)}.ui-panel-fixed{position:fixed;bottom:-1px;padding-bottom:1px}.ui-panel-display-reveal{z-index:1}.ui-panel-display-push{z-index:999}.ui-panel-display-overlay{z-index:1001}.ui-panel-inner{padding:1em}.ui-panel-page-container{overflow-x:visible}.ui-panel-page-container-themed .ui-page-active{background:0}.ui-panel-wrapper{position:relative;min-height:inherit;border:0;overflow-x:hidden;z-index:999}.ui-panel-fixed-toolbar{overflow-x:hidden}.ui-panel-dismiss{position:absolute;top:0;left:0;right:0;height:100%;z-index:1002;display:none}.ui-panel-dismiss-open{display:block}.ui-panel-animate{-webkit-transition:-webkit-transform 300ms ease;-webkit-transition-duration:300ms;-moz-transition:-moz-transform 300ms ease;transition:transform 300ms ease}@media screen and (max-device-width:768px){.ui-page-header-fixed .ui-panel-animate.ui-panel-wrapper,.ui-page-footer-fixed .ui-panel-animate.ui-panel-wrapper,.ui-panel-animate.ui-panel-fixed-toolbar{-ms-transition:none}.ui-panel-animate.ui-panel-fixed-toolbar{-ms-transition:-ms-transform 1ms;-ms-transform:rotate(0deg)}}.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal){-webkit-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0)}.ui-panel-position-left{left:-17em}.ui-panel-animate.ui-panel-position-left.ui-panel-display-overlay,.ui-panel-animate.ui-panel-position-left.ui-panel-display-push{left:0;-webkit-transform:translate3d(-17em,0,0);-moz-transform:translate3d(-17em,0,0);transform:translate3d(-17em,0,0)}.ui-panel-position-left.ui-panel-display-reveal,.ui-panel-open.ui-panel-position-left{left:0}.ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-overlay,.ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-push{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-moz-transform:none}.ui-panel-position-right{right:-17em}.ui-panel-animate.ui-panel-position-right.ui-panel-display-overlay,.ui-panel-animate.ui-panel-position-right.ui-panel-display-push{right:0;-webkit-transform:translate3d(17em,0,0);-moz-transform:translate3d(17em,0,0);transform:translate3d(17em,0,0)}.ui-panel-position-right.ui-panel-display-reveal,.ui-panel-position-right.ui-panel-open{right:0}.ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-overlay,.ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-push{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-moz-transform:none}.ui-panel-page-content-position-left{left:17em;right:-17em}.ui-panel-animate.ui-panel-page-content-position-left{left:0;right:0;-webkit-transform:translate3d(17em,0,0);-moz-transform:translate3d(17em,0,0);transform:translate3d(17em,0,0)}.ui-panel-page-content-position-right{left:-17em;right:17em}.ui-panel-animate.ui-panel-page-content-position-right{left:0;right:0;-webkit-transform:translate3d(-17em,0,0);-moz-transform:translate3d(-17em,0,0);transform:translate3d(-17em,0,0)}.ui-panel-dismiss-open.ui-panel-dismiss-position-left{left:17em}.ui-panel-dismiss-open.ui-panel-dismiss-position-right{right:17em}.ui-panel-display-reveal{-webkit-box-shadow:inset -5px 0 5px rgba(0,0,0,.15);-moz-box-shadow:inset -5px 0 5px rgba(0,0,0,.15);box-shadow:inset -5px 0 5px rgba(0,0,0,.15)}.ui-panel-position-right.ui-panel-display-reveal{-webkit-box-shadow:inset 5px 0 5px rgba(0,0,0,.15);-moz-box-shadow:inset 5px 0 5px rgba(0,0,0,.15);box-shadow:inset 5px 0 5px rgba(0,0,0,.15)}.ui-panel-display-overlay{-webkit-box-shadow:5px 0 5px rgba(0,0,0,.15);-moz-box-shadow:5px 0 5px rgba(0,0,0,.15);box-shadow:5px 0 5px rgba(0,0,0,.15)}.ui-panel-position-right.ui-panel-display-overlay{-webkit-box-shadow:-5px 0 5px rgba(0,0,0,.15);-moz-box-shadow:-5px 0 5px rgba(0,0,0,.15);box-shadow:-5px 0 5px rgba(0,0,0,.15)}.ui-panel-open.ui-panel-position-left.ui-panel-display-push{border-right-width:1px;margin-right:-1px}.ui-panel-page-content-position-left.ui-panel-page-content-display-push{margin-left:1px;width:auto}.ui-panel-open.ui-panel-position-right.ui-panel-display-push{border-left-width:1px;margin-left:-1px}.ui-panel-page-content-position-right.ui-panel-page-content-display-push{margin-right:1px;width:auto}@media (min-width:55em){.ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-left{margin-right:17em}.ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-right{margin-left:17em}.ui-responsive-panel .ui-panel-page-content-open{width:auto}.ui-responsive-panel .ui-panel-dismiss-display-push,.ui-responsive-panel.ui-page-active~.ui-panel-dismiss-display-push{display:none}}.ui-tabs{position:relative;padding:.2em} \ No newline at end of file diff --git a/.svn/pristine/6e/6ef29eec541f68523bd70492f006bdf8772a6f59.svn-base b/.svn/pristine/6e/6ef29eec541f68523bd70492f006bdf8772a6f59.svn-base deleted file mode 100644 index f904dca..0000000 --- a/.svn/pristine/6e/6ef29eec541f68523bd70492f006bdf8772a6f59.svn-base +++ /dev/null @@ -1,35 +0,0 @@ -
-
-

Extra

- -
-
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- - -
-
-
-
diff --git a/.svn/pristine/76/76332fb2c15d659ecfd3fbcb8332395c4dfd4c01.svn-base b/.svn/pristine/76/76332fb2c15d659ecfd3fbcb8332395c4dfd4c01.svn-base deleted file mode 100644 index 4ef7626..0000000 --- a/.svn/pristine/76/76332fb2c15d659ecfd3fbcb8332395c4dfd4c01.svn-base +++ /dev/null @@ -1,76 +0,0 @@ -
-
-

Extra

- - -
-
-
-
- - -
-
- -
-
- -
-
-
- -
-
- -
-
-
-
-
- -
-
- -
-
- - -
-
- - - - -
-
-
- -
-
- -
-
-
-
diff --git a/.svn/pristine/76/76c5a7911ff68039f9c3b62920f8d71437cd8f37.svn-base b/.svn/pristine/76/76c5a7911ff68039f9c3b62920f8d71437cd8f37.svn-base deleted file mode 100644 index d2df00a..0000000 --- a/.svn/pristine/76/76c5a7911ff68039f9c3b62920f8d71437cd8f37.svn-base +++ /dev/null @@ -1,810 +0,0 @@ -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } -#define ALEXA -#define OTA - -#include "Arduino.h" -#include -#include -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#ifdef ALEXA -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); -#ifdef ALEXA -fauxmoESP fauxmo; -#endif -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Manual"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -// Alexa config values -StringConfigItem date_name("date_name", 20, String("date")); -StringConfigItem backlight_name("backlight_name", 20, String("backlight")); -StringConfigItem clock_name("clock_name", 20, String("clock")); -StringConfigItem test_name("test_name", 20, String("test")); -StringConfigItem cycling_name("cycling_name", 20, String("hue cycling")); -StringConfigItem twelve_hour_name("twelve_hour_name", 20, String("12 hour")); -StringConfigItem zero_name("zero_name", 20, String("leading zero")); - -BaseConfigItem *alexaSet[] = { - // Alexa - &date_name, - &backlight_name, - &clock_name, - &test_name, - &cycling_name, - &twelve_hour_name, - &zero_name, - 0 -}; - -CompositeConfigItem alexaConfig("alexa", 0, alexaSet); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - &alexaConfig, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *out_effect = &ConfigSet1::out_effect; - ByteConfigItem *in_effect = &ConfigSet1::in_effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - BooleanConfigItem *hv = &ConfigSet1::hv; - - // Alexa config values - StringConfigItem *date_name = &::date_name; - StringConfigItem *backlight_name = &::backlight_name; - StringConfigItem *clock_name = &::clock_name; - StringConfigItem *test_name = &::test_name; - StringConfigItem *cycling_name = &::cycling_name; - StringConfigItem *twelve_hour_name = &::twelve_hour_name; - StringConfigItem *zero_name = &::zero_name; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - out_effect = static_cast(config->get("out_effect")); - in_effect = static_cast(config->get("in_effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - hv = static_cast(config->get("hv")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setHV(*CurrentConfig::hv); - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setOutEffect(*CurrentConfig::out_effect); - clock.setInEffect(*CurrentConfig::in_effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void setTimeFromWifiManager() { - static String oldWifiTime = ""; - - const String &wifiTime = wifiManager.getWifiTime(); - if (wifiTime != oldWifiTime) { - DEBUG(String("Setting time from wifi manager") + wifiTime); - int intValues[6]; - grabInts(wifiTime, &intValues[0], ","); - - timeInitialized = true; - oldWifiTime = wifiTime; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); - } -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSGlobalConfigHandler wsAlexaHandler(rootConfig, "alexa"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -String *items[] = { - &WSMenuHandler::clockMenu, - &WSMenuHandler::ledsMenu, - &WSMenuHandler::extraMenu, - &WSMenuHandler::alexaMenu, - &WSMenuHandler::presetsMenu, - &WSMenuHandler::infoMenu, - &WSMenuHandler::presetNamesMenu, - 0 -}; - -WSMenuHandler wsMenuHandler(items); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsAlexaHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else if (screen == 7) { // Alexa switch names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { -#ifdef ALEXA - StringConfigItem *sItem = static_cast(item); - int deviceId = fauxmo.getDeviceId(sItem->value.c_str()); - if (deviceId > 0) { - fauxmo.renameDevice(deviceId, value.c_str()); - } - item->fromString(value); - item->put(); - broadcastUpdate(*item); -#endif - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void startFauxMo() { - fauxmo.enable(true); - fauxmo.addDevice(CurrentConfig::date_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::backlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::clock_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::test_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::cycling_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::twelve_hour_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::zero_name->value.c_str()); - - fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state) { - BooleanConfigItem *item = 0; - switch (device_id) { - case 0: - item = &(*CurrentConfig::time_or_date = !state); - break; - case 1: - item = &(*CurrentConfig::backlight = state); - break; - case 2: - item = &(*CurrentConfig::hv = state); - break; - case 3: - item = &(*CurrentConfig::display = !state); - break; - case 4: - item = &(*CurrentConfig::hue_cycling = state); - break; - case 5: - item = &(*CurrentConfig::hour_format = state); - break; - case 6: - item = &(*CurrentConfig::leading_zero = state); - break; - } - - if (item != 0) { - item->put(); - } - broadcastUpdate(*item); - }); - fauxmo.onGetState([](unsigned char device_id, const char * device_name) { - bool ret = false; - switch (device_id) { - case 0: - ret = *CurrentConfig::time_or_date; - ret = !ret; - break; - case 1: - ret = *CurrentConfig::backlight; - break; - case 2: - ret = *CurrentConfig::hv; - break; - case 3: - ret = *CurrentConfig::display; - ret = !ret; - break; - case 4: - ret = *CurrentConfig::hue_cycling; - break; - case 5: - ret = *CurrentConfig::hour_format; - break; - case 6: - ret = *CurrentConfig::leading_zero; - break; - } - - return ret; - }); -} - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); - - startFauxMo(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(true); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - setTimeFromWifiManager(); -#ifdef ALEXA - fauxmo.handle(); -#endif - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/77/77a8528b839cc9a5db24007a0c72fd46bcca0169.svn-base b/.svn/pristine/77/77a8528b839cc9a5db24007a0c72fd46bcca0169.svn-base deleted file mode 100644 index 12e1100..0000000 --- a/.svn/pristine/77/77a8528b839cc9a5db24007a0c72fd46bcca0169.svn-base +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - ${eclipse_home} - - String getProperty(Properties props, String key, int level) { - def value = null - value = props.getProperty(key); - if (value != null) { - // Get the index of the first constant, if any - def beginIndex = 0; - def startName = value.indexOf('${', beginIndex); - - while (startName != -1) { - if (level+1 > 5) { - // Exceeded MAX_SUBST_DEPTH - // Return the value as is - return value; - } - - def endName = value.indexOf('}', startName + 1); - if (endName == -1) { - // Terminating symbol not found - // Return the value as is - return value; - } - - def constName = value.substring(startName+2, endName); - def constValue = getProperty(props, constName, level+1); - - if (constValue == null) { - // Property name not found - // Return the value as is - return value; - } - - // Insert the constant value into the - // original property value - def newValue = (startName>0) - ? value.substring(0, startName) : ""; - newValue += constValue; - - // Start checking for constants at this index - beginIndex = newValue.length(); - - // Append the remainder of the value - newValue += value.substring(endName+1); - - value = newValue; - - // Look for the next constant - startName = value.indexOf('${', beginIndex); - } - } - - // Return the value as is - return value; - } - - def props = new Properties() - - props['eclipse_home'] = properties['eclipse_home'] - props['project_loc'] = properties['project_loc'] - new File(properties['project_loc'] + './.settings/org.eclipse.cdt.core.prefs').eachLine { line -> - if ((matcher = line =~ /.*\/([AJ].+)\/value=(.+)$/)) { - props[matcher[0][1]] = matcher[0][2] - } - } - props.each{ k, v -> - properties[k] = getProperty(props, k, 0) - } - - properties['A.BUILD.SPIFFS_SIZE'] = Integer.parseInt(properties['A.BUILD.SPIFFS_END'].substring(2),16) - Integer.parseInt(properties['A.BUILD.SPIFFS_START'].substring(2), 16) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.svn/pristine/79/798e455d9f3417d264ab519bc2de187c51f9c6c6.svn-base b/.svn/pristine/79/798e455d9f3417d264ab519bc2de187c51f9c6c6.svn-base deleted file mode 100644 index e07055d..0000000 --- a/.svn/pristine/79/798e455d9f3417d264ab519bc2de187c51f9c6c6.svn-base +++ /dev/null @@ -1,165 +0,0 @@ - - - ITS1A - - - - - - io.sloeber.core.inoToCpp - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - io.sloeber.arduinonature - - - - core/core - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266 - - - core/variant - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/variants/d1_mini - - - libraries/Adafruit_LIS3DH - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_LIS3DH - - - libraries/Adafruit_MCP23017_Arduino_Library - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_MCP23017_Arduino_Library - - - libraries/Adafruit_NeoPixel - 2 - C:/Users/mpand/Documents/Arduino/libraries/Adafruit_NeoPixel - - - libraries/Adafruit_Unified_Sensor - 2 - ECLIPSE_HOME/arduinoPlugin/libraries/Adafruit_Unified_Sensor/1.0.2 - - - libraries/ArduinoJson - 2 - C:/Users/mpand/Documents/Arduino/libraries/ArduinoJson - - - libraries/ArduinoOTA - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ArduinoOTA - - - libraries/Configs - 2 - C:/Users/mpand/Documents/Arduino/libraries/Configs - - - libraries/DNSServer - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/DNSServer - - - libraries/EEPROM - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/EEPROM - - - libraries/ESP8266WiFi - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi - - - libraries/ESP8266mDNS - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266mDNS - - - libraries/ESPAsyncHttpClient - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncHttpClient - - - libraries/ESPAsyncTCP - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncTCP - - - libraries/ESPAsyncWebServer - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncWebServer - - - libraries/ESPAsyncWiFiManager - 2 - C:/Users/mpand/Documents/Arduino/libraries/ESPAsyncWiFiManager - - - libraries/Hash - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/Hash - - - libraries/NixieDriver - 2 - C:/Users/mpand/Documents/Arduino/libraries/NixieDriver - - - libraries/NixieMisc - 2 - C:/Users/mpand/Documents/Arduino/libraries/NixieMisc - - - libraries/OneNixieClock - 2 - C:/Users/mpand/Documents/Arduino/libraries/OneNixieClock - - - libraries/SPI - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/SPI - - - libraries/Time - 2 - C:/Users/mpand/Documents/Arduino/libraries/Time - - - libraries/U8g2 - 2 - C:/Users/mpand/Documents/Arduino/libraries/U8g2 - - - libraries/UPS - 2 - C:/Users/mpand/Documents/Arduino/libraries/UPS - - - libraries/Wire - 2 - ECLIPSE_HOME/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/libraries/Wire - - - diff --git a/.svn/pristine/80/802d90eca58784c4ab7fabece6edba7db35d82bd.svn-base b/.svn/pristine/80/802d90eca58784c4ab7fabece6edba7db35d82bd.svn-base deleted file mode 100644 index 5aed661..0000000 --- a/.svn/pristine/80/802d90eca58784c4ab7fabece6edba7db35d82bd.svn-base +++ /dev/null @@ -1,92 +0,0 @@ - -
-
-

Clock

- -
-
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
diff --git a/.svn/pristine/81/81bd5cdf8fd9305c68814933fd6bc428c76e8980.svn-base b/.svn/pristine/81/81bd5cdf8fd9305c68814933fd6bc428c76e8980.svn-base deleted file mode 100644 index 0cd7b57..0000000 --- a/.svn/pristine/81/81bd5cdf8fd9305c68814933fd6bc428c76e8980.svn-base +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - STC - - - - - - - - - - - - - - -
-
-

nixies.us - STC

-
- -
- - \ No newline at end of file diff --git a/.svn/pristine/84/8489a0b266c766a2b208f8dd1105aaf56b5e41d8.svn-base b/.svn/pristine/84/8489a0b266c766a2b208f8dd1105aaf56b5e41d8.svn-base deleted file mode 100644 index 77e5a5392edeb937df286c497b608d66b0e9f96a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmVU1KeVx%@n z14Y(FLl8|M^ibAPTGEz+Agi^4c=6Or=%MXt53>-bUa{L_6~+&H2~0^PUjuN!~FfSTCK-(b91yI@_~VYH)xvvWoc;%2LSMRJfos0{xCK+_E92{_>$we z+W??b6jc@kp-R)V?r=CZ4-XH|^?A{=791TNaTbf^r-g-uQ@`K;If|kmXS3Pt!NGwW zL69FAhS_EqW;>ZozFDnSpAZD`XSrOCaU6GQNPtWxbC2UVc4K1$mu2}8P1E?!&W?Gc1Oi?|12iI)N(mgtm4=3f-U0xfrs)Hp&zCbTfTAe5&d$#F z?RNWZtJQj(%jINI6u)b4Z(m+qT)faeb1AyIy1r2q~_0v4Gs>j z<@5QTrpQ%QeOC~K-&mF{y$n!!b$)qyna*S~-loU_0J7Qa^;9Z#-EOy6;KlA(ZkntS zEiEnk@Zt^pe9>pm+y^dFhoY!^2Gu)1Gcz+BhG8`XLG*Aq95FqBq9`8#fX?&$rs?u{ zJT8(Xxla(pQEzW=&{TOkowjlucNfF3YA6)CW~#ieuTNoF_C8J1zlK5~V-KE2%+Jr` zk|ce`vh1!TNuT8Nd5dXsRaLu1QQVXyX<=k!#Accp0HC|OJ17Xk_rt@(ZD+4;0xp+p zZFF>0_+R9SM1tjc{wdG%U-$I%44WQ66vdnHO2_MPIBt!Pj~mnRo<$@Qxq=|bKiY0V z5Y|iy;BvX<>QbKP|EP}<1kp83GvxnocpBDfHK{%(N%9M~+nr|^=83NBu)DkaPSXS6 zIKBe_z%a~qI-UM@Z*T9bLZRUEcsyBImY*3BpdqnXtc@UuW53@YZ@TQ?&@}C8GwVMG X1>W};&Eu5p00000NkvXXu0mjfviReh diff --git a/.svn/pristine/8d/8d1647bbce0213023170a950341a58b203507c46.svn-base b/.svn/pristine/8d/8d1647bbce0213023170a950341a58b203507c46.svn-base deleted file mode 100644 index 731770f..0000000 --- a/.svn/pristine/8d/8d1647bbce0213023170a950341a58b203507c46.svn-base +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.svn/pristine/92/9274e0e3089e285ed4366aef03d6b1b50be33515.svn-base b/.svn/pristine/92/9274e0e3089e285ed4366aef03d6b1b50be33515.svn-base deleted file mode 100644 index 20718b0..0000000 --- a/.svn/pristine/92/9274e0e3089e285ed4366aef03d6b1b50be33515.svn-base +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/.svn/pristine/97/97acc568237e2547cb51363d4ca9d0592490334e.svn-base b/.svn/pristine/97/97acc568237e2547cb51363d4ca9d0592490334e.svn-base deleted file mode 100644 index 9d6f51f..0000000 --- a/.svn/pristine/97/97acc568237e2547cb51363d4ca9d0592490334e.svn-base +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.svn/pristine/9f/9f13af91bffee8105ba0d5d022fcbb3aa0e519d7.svn-base b/.svn/pristine/9f/9f13af91bffee8105ba0d5d022fcbb3aa0e519d7.svn-base deleted file mode 100644 index eb03b93..0000000 --- a/.svn/pristine/9f/9f13af91bffee8105ba0d5d022fcbb3aa0e519d7.svn-base +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - -Redirecting... - \ No newline at end of file diff --git a/.svn/pristine/a3/a3ecd1734869d7a65be49521801cdae961781cb7.svn-base b/.svn/pristine/a3/a3ecd1734869d7a65be49521801cdae961781cb7.svn-base deleted file mode 100644 index ed9b6a5..0000000 --- a/.svn/pristine/a3/a3ecd1734869d7a65be49521801cdae961781cb7.svn-base +++ /dev/null @@ -1,257 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var expressStaticGzip = require("express-static-gzip"); -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(expressStaticGzip("data")); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"7": { "url" : "alexa.html", "title" : "Alexa" }}, - {"4": { "url" : "presets.html", "title" : "Presets" }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendAlexa = function(conn) { - var json = '{"type":"sv.init.alexa","value":'; - json += JSON.stringify(state[7]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200 - }, - "3": { - 'show_date': 1, - 'out_effect': 2, - 'in_effect': 3, - 'display': true, - 'test': 60, - 'reset_time': 2500, - 'set_time': 200, - 'hv': true - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - }, - "7": { - 'date_name' : 'date', - 'backlight_name' : 'backlight', - 'clock_name' : 'clock', - 'test_name' : 'test', - 'cycling_name' : 'hue cycling', - 'twelve_hour_name' : '12 hour', - 'zero_name' : 'leading zero' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 7: - sendAlexa(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/a4/a4b56b149ccd36225e96b55c7fc6d23283879973.svn-base b/.svn/pristine/a4/a4b56b149ccd36225e96b55c7fc6d23283879973.svn-base deleted file mode 100644 index a2c8300..0000000 --- a/.svn/pristine/a4/a4b56b149ccd36225e96b55c7fc6d23283879973.svn-base +++ /dev/null @@ -1,644 +0,0 @@ -#define ONE_TUBE - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#define OTA -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Test"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - BooleanConfigItem *show_date = &ConfigSet1::show_date; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSMenuHandler wsMenuHandler(0); -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/a6/a6ef8615c28139c67fbacc9b0299790b88716db3.svn-base b/.svn/pristine/a6/a6ef8615c28139c67fbacc9b0299790b88716db3.svn-base deleted file mode 100644 index cbe02b6..0000000 --- a/.svn/pristine/a6/a6ef8615c28139c67fbacc9b0299790b88716db3.svn-base +++ /dev/null @@ -1,50 +0,0 @@ -
-
-

LEDs

- -
-
-
-
-
- -
-
- -
-
-
- -
-
- -
-
-
- - -
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
diff --git a/.svn/pristine/a8/a8835a2ca30e274d4501f788746841a672274508.svn-base b/.svn/pristine/a8/a8835a2ca30e274d4501f788746841a672274508.svn-base deleted file mode 100644 index 31432e9..0000000 --- a/.svn/pristine/a8/a8835a2ca30e274d4501f788746841a672274508.svn-base +++ /dev/null @@ -1,261 +0,0 @@ -#define ONE_TUBE -#define NEOPIXELS - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#ifdef NEOPIXELS -#include - -#define PIN 1 - -// How many NeoPixels are attached to the Arduino? -#define NUMPIXELS 8 - -// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals. -// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest -// example for more information on possible values. -Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); -#endif - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -String hostName("ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -//OneNixieClock oneNixieClock(pDriver, 60); -//TwoNixieClock oneNixieClock(pDriver); -//FourNixieClock oneNixieClock(pDriver); -SixNixieClock oneNixieClock(pDriver); -NixieClock *pNixieClock = &oneNixieClock; - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -bool timeInitialized = false; - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void SetupServer() { - DEBUG("SetupServer()"); - - StartOTA(); - - MDNS.begin(hostName.c_str()); - MDNS.addService("http", "tcp", 80); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ -#ifdef NEOPIXELS - pixels.begin(); // This initializes the NeoPixel library. - pixels.setBrightness(0); - pixels.show(); -#endif - - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - -#ifdef NEOPIXELS - // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one. - - if (nowMs > nextMs) { - nextMs = nowMs + 15; - pixels.setBrightness(255); - - // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255 - for (int i=0; i< NUMPIXELS; i++) { - pixels.setPixelColor(i, pixels.Color(abs(r - 255),30,30)); // Moderately bright green color. - } - - pixels.show(); // This sends the updated pixel color to the hardware. - - r = (r + 1) % 510; - } -#endif - - if (timeInitialized) { - pNixieClock->setClockMode(true); - pNixieClock->setCountSpeed(60); - } else { - pNixieClock->setClockMode(false); - pNixieClock->setCountSpeed(60); - } - - pNixieClock->setFadeMode(0); - pNixieClock->setTimeMode(true); - pNixieClock->setDateFormat(1); - pNixieClock->setShowSeconds(false); - pNixieClock->set12hour(false); - pNixieClock->setOnOff(6, 0); - pNixieClock->setDigitsOn(1500); - pNixieClock->setScrollback(true); - - pNixieClock->loop(nowMs); - timedFunctions.loop(); -} diff --git a/.svn/pristine/ac/acdca46b609ce357db9bf1e80c0edbab223cc536.svn-base b/.svn/pristine/ac/acdca46b609ce357db9bf1e80c0edbab223cc536.svn-base deleted file mode 100644 index fdbb905..0000000 --- a/.svn/pristine/ac/acdca46b609ce357db9bf1e80c0edbab223cc536.svn-base +++ /dev/null @@ -1,89 +0,0 @@ -const gulp = require('gulp'); -const plumber = require('gulp-plumber'); -const htmlmin = require('gulp-htmlmin'); -const cleancss = require('gulp-clean-css'); -const uglify = require('gulp-uglify'); -const gzip = require('gulp-gzip'); -const del = require('del'); -const useref = require('gulp-useref'); -const gulpif = require('gulp-if'); -const inline = require('gulp-inline'); -const inlineImages = require('gulp-css-inline-images'); -const favicon = require('gulp-base64-favicon'); - -/* Clean destination folder */ -gulp.task('clean', function() { - return del(['data/*']); -}); - -/* Copy static files */ -gulp.task('files', function() { - return gulp.src([ - 'web/**/*.{jpg,jpeg,png,ico,gif}', - 'web/fsversion' - ]) - .pipe(gulp.dest('data/')); -}); - -/* Process HTML, CSS, JS --- INLINE --- */ -gulp.task('inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: cleancss, - disabledTypes: ['svg', 'img'] - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -gulp.task('buildfs_inline', function() { - return gulp.src('web/*.html') - .pipe(inline({ - base: 'web/', - js: uglify, - css: [cleancss], - disabledTypes: ['svg', 'img'] - })) - .pipe(inlineImages({ - webRoot: "web" - })) - .pipe(htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - })) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}) - -/* Process HTML, CSS, JS */ -gulp.task('html', function() { - return gulp.src('web/*.html') - .pipe(useref()) - .pipe(plumber()) - .pipe(gulpif('*.css', cleancss())) - .pipe(gulpif('*.js', uglify())) - .pipe(gulpif('*.html', htmlmin({ - collapseWhitespace: true, - removeComments: true, - minifyCSS: true, - minifyJS: true - }))) - .pipe(gzip()) - .pipe(gulp.dest('data')); -}); - -/* Build file system */ -gulp.task('buildfs', ['clean', 'files', 'html']); -gulp.task('buildfs2', ['clean', 'files', 'inline']); -gulp.task('default', ['buildfs_inline']); - \ No newline at end of file diff --git a/.svn/pristine/b2/b2d44f8281a2195b3ee0c9a2d7ce200020a08f10.svn-base b/.svn/pristine/b2/b2d44f8281a2195b3ee0c9a2d7ce200020a08f10.svn-base deleted file mode 100644 index 43e77bf..0000000 --- a/.svn/pristine/b2/b2d44f8281a2195b3ee0c9a2d7ce200020a08f10.svn-base +++ /dev/null @@ -1,531 +0,0 @@ -eclipse.preferences.version=1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/value=arduino.ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/value=ESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/value=ESP8266_ESP01 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/value=${A.RUNTIME.PLATFORM.PATH}/cores/${A.BUILD.CORE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/value=-DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/value=40 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/value=eagle.flash.1m256.ld -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/value=dout -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/value=1M -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/value=80000000L -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/value=-DLWIP_OPEN_SRC -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/value=-llwip_gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/value=${ProjName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/value=4096 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/value=0xFB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/value=256 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/value=0xBB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\variants\\generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/value=generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/value=xtensa-lx106-elf-ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/value=cru -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/value=xtensa-lx106-elf-as -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/value=-g ${A.COMPILER.WARNING_FLAGS} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" "-T${A.BUILD.FLASH_LD}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/value=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 ${A.BUILD.LWIP_LIB} -lstdc++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -MMD -std\=gnu99 -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/value=xtensa-lx106-elf-g++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -MMD -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/value=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I${A.COMPILER.SDK.PATH}/include" "-I${A.COMPILER.SDK.PATH}/lwip/include" "-I${A.BUILD.PATH}/core" -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH}/bin/ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp -MMD -mlongcalls -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/value=xtensa-lx106-elf-size -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Wextra -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/value=-w -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL} -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/value=3600 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/value=1534971874 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/value=1534986274 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/value=-18000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/value=${JANTJE.BOARDS_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-ar" cru "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/arduino.ar" "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lib" "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/ld" "-Teagle.flash.1m256.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -Wl,--start-group -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-LC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -Wl,--start-group ${A.OBJECT_FILES} "${A.BUILD.PATH}/arduino.ar" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group "-L${A.BUILD.PATH}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -std\=gnu99 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13/esptool.exe" -eo "C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/bootloaders/eboot/eboot.elf" -bo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.bin" -bm dout -bf 40 -bz 1M -bs .text -bp 4096 -ec -eo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.RUNTIME.TOOLS.ESPTOOL.PATH}/${A.COMPILER.ESPTOOL.CMD}" -eo "${A.RUNTIME.PLATFORM.PATH}/bootloaders/eboot/eboot.elf" -bo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -bm ${A.BUILD.FLASH_MODE} -bf ${A.BUILD.FLASH_FREQ} -bz ${A.BUILD.FLASH_SIZE} -bs .text -bp 4096 -ec -eo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -g -x assembler-with-cpp -mlongcalls -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-size" -A "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.data|\\.rodata|\\.bss)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/value=^(?\:\\.irom0\\.text|\\.text|\\.data|\\.rodata|)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/value=10802 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/value=${JANTJE.COM_PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/value=ARDUINO -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESPTOOL.NETWORK_CMD} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/value=python.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/value=${A.RUNTIME.TOOLS.ESPTOOL.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/value="${A.TOOLS.ESPTOOL.NETWORK_CMD}" "${A.RUNTIME.PLATFORM.PATH}/tools/espota.py" -i "${A.SERIAL.PORT}" -p "${A.TOOLS.ESPTOOL.NETWORK.PORT}" "--auth\=${A.TOOLS.ESPTOOL.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/value=-vv -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL.PATH}/${A.TOOLS.ESPTOOL.CMD}" ${A.TOOLS.ESPTOOL.UPLOAD.VERBOSE} -cd ${A.UPLOAD.RESETMETHOD} -cb ${A.UPLOAD.SPEED} -cp "${A.SERIAL.PORT}" -ca 0x00000 -cf "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/value=esp -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/value=mkspiffs.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/value=${A.RUNTIME.TOOLS.MKSPIFFS.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/value=81920 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/value=761840 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/value=stk500v1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/value=nodemcu -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/value=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/value=2.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\boards.txt -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/value=esp8285 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/value=COM13 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/value=C\:\\Users\\mpand\\eclipse\\ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/value=${eclipse_home}/arduinoPlugin/tools/make/ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/value=CpuFrequency\=80\nFlashSize\=1M256\nResetMethod\=nodemcu\nUploadSpeed\=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.HEX.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/value=win32 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/value=ITS1A -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/value=Default -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/value=C\:\\Users\\mpand\\eclipse-workspace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${SystemRoot}\\system32${PathDelimiter}${SystemRoot}${PathDelimiter}${SystemRoot}\\system32\\Wbem${PathDelimiter}${sloeber_path_extension} -environment/project/io.sloeber.core.toolChain.release.34549407/append=true -environment/project/io.sloeber.core.toolChain.release.34549407/appendContributed=true diff --git a/.svn/pristine/b5/b5f4b3ccd1ebc6852fd90fd0a8a8c051ce078ca6.svn-base b/.svn/pristine/b5/b5f4b3ccd1ebc6852fd90fd0a8a8c051ce078ca6.svn-base deleted file mode 100644 index a41e943..0000000 --- a/.svn/pristine/b5/b5f4b3ccd1ebc6852fd90fd0a8a8c051ce078ca6.svn-base +++ /dev/null @@ -1,8 +0,0 @@ - ets Jan 8 2013,rst cause:2, boot mode:(3,6) - -load 0x4010f000, len 1384, room 16 -tail 8 -chksum 0x2d -csum 0x2d -v3ffea88c -~ld \ No newline at end of file diff --git a/.svn/pristine/b6/b6802d4b6c9eb90830c8482a5933d6fc9bee6a31.svn-base b/.svn/pristine/b6/b6802d4b6c9eb90830c8482a5933d6fc9bee6a31.svn-base deleted file mode 100644 index f5f3b43..0000000 --- a/.svn/pristine/b6/b6802d4b6c9eb90830c8482a5933d6fc9bee6a31.svn-base +++ /dev/null @@ -1,531 +0,0 @@ -eclipse.preferences.version=1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ALT_SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE/value=arduino.ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ARCHIVE_FILE_PATH/value=${A.BUILD.PATH}/${A.ARCHIVE_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.ARCH/value=ESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.BOARD/value=ESP8266_ESP01 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE.PATH/value=${A.RUNTIME.PLATFORM.PATH}/cores/${A.BUILD.CORE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.CORE/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_LEVEL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.DEBUG_PORT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.EXTRA_FLAGS/value=-DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_FREQ/value=40 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_LD/value=eagle.flash.1m64.ld -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_MODE/value=dout -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.FLASH_SIZE/value=1M -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.F_CPU/value=80000000L -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_FLAGS/value=-DLWIP_OPEN_SRC -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.LWIP_LIB/value=-llwip_gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.MCU/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.PROJECT_NAME/value=${ProjName} -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_BLOCKSIZE/value=4096 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_END/value=0xFB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_PAGESIZE/value=256 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SPIFFS_START/value=0xEB000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.PLATFORM.PATH}/system -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT.PATH/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\variants\\generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.BUILD.VARIANT/value=generic -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.CMD/value=xtensa-lx106-elf-ar -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AR.FLAGS/value=cru -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.AS.CMD/value=xtensa-lx106-elf-as -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.FLAGS/value=-g ${A.COMPILER.WARNING_FLAGS} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L${A.COMPILER.SDK.PATH}/lib" "-L${A.COMPILER.SDK.PATH}/ld" "-T${A.BUILD.FLASH_LD}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.ELF.LIBS/value=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 ${A.BUILD.LWIP_LIB} -lstdc++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.C.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -MMD -std\=gnu99 -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.CMD/value=xtensa-lx106-elf-g++ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPP.FLAGS/value=-c ${A.COMPILER.WARNING_FLAGS} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -MMD -ffunction-sections -fdata-sections -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.CPREPROCESSOR.FLAGS/value=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I${A.COMPILER.SDK.PATH}/include" "-I${A.COMPILER.SDK.PATH}/lwip/include" "-I${A.BUILD.PATH}/core" -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.CMD/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ELF2HEX.FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.OBJCOPY.EEP.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.PATH/value=${A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH}/bin/ -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.CMD/value=xtensa-lx106-elf-gcc -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.EXTRA_FLAGS/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp -MMD -mlongcalls -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SDK.PATH/value=${A.RUNTIME.PLATFORM.PATH}/tools/sdk -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.SIZE.CMD/value=xtensa-lx106-elf-size -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.ALL/value=-Wall -Wextra -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.DEFAULT/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.MORE/value=-Wall -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS.NONE/value=-w -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.COMPILER.WARNING_FLAGS/value=${A.COMPILER.WARNING_FLAGS.ALL} -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.ESP8266.NETWORK.UPLOAD.TOOL/value=esp8266OTA -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.DTS/value=3600 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.LOCAL/value=1530654872 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.UTC/value=1530669272 -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.EXTRA.TIME.ZONE/value=-18000 -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.CORE.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.USED.BOARDS_FILE/value=${JANTJE.BOARDS_FILE} -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.JANTJE.VARIANT.REFERENCED.PLATFORM/value=${JANTJE.SELECTED.PLATFORM} -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.PACKAGES/value=${eclipse_home}/arduinoPlugin/packages -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-ar" cru "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN.2/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/arduino.ar" "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lib" "-LC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/ld" "-Teagle.flash.1m64.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -Wl,--start-group -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-LC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -Wl,--start-group ${A.OBJECT_FILES} "${A.BUILD.PATH}/arduino.ar" ${A.COMPILER.C.ELF.LIBS} -Wl,--end-group "-L${A.BUILD.PATH}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions\=4 -std\=gnu99 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.C.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -Wall -Wextra -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions\=4 -std\=c++11 -ffunction-sections -fdata-sections -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.CPP.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.EEP.PATTERN/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13/esptool.exe" -eo "C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/bootloaders/eboot/eboot.elf" -bo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.bin" -bm dout -bf 40 -bz 1M -bs .text -bp 4096 -ec -eo "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.RUNTIME.TOOLS.ESPTOOL.PATH}/${A.COMPILER.ESPTOOL.CMD}" -eo "${A.RUNTIME.PLATFORM.PATH}/bootloaders/eboot/eboot.elf" -bo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -bm ${A.BUILD.FLASH_MODE} -bf ${A.BUILD.FLASH_FREQ} -bz ${A.BUILD.FLASH_SIZE} -bs .text -bp 4096 -ec -eo "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.SAVE_FILE/value=${A.BUILD.PROJECT_NAME}.${A.BUILD.VARIANT}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.OUTPUT.TMP_FILE/value=${A.BUILD.PROJECT_NAME}.bin -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/include" "-IC\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0/tools/sdk/lwip/include" "-IC\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/core" -c -g -x assembler-with-cpp -mlongcalls -DF_CPU\=80000000L -DLWIP_OPEN_SRC -DARDUINO\=10802 -DARDUINO_ESP8266_ESP01 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD\=\\"ESP8266_ESP01\\"" -DESP8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.2/value=\ -o -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN.3/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.S.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.CPREPROCESSOR.FLAGS} ${A.COMPILER.S.FLAGS} -DF_CPU\=${A.BUILD.F_CPU} ${A.BUILD.LWIP_FLAGS} ${A.BUILD.DEBUG_PORT} ${A.BUILD.DEBUG_LEVEL} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} "-DARDUINO_BOARD\=\\"${A.BUILD.BOARD}\\"" ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN.1/value="C\:\\Users\\mpand\\eclipse\\/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-size" -A "C\:\\Users\\mpand\\eclipse-workspace\\ITS1A/Release/ITS1A.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX.DATA/value=^(?\:\\.data|\\.rodata|\\.bss)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RECIPE.SIZE.REGEX/value=^(?\:\\.irom0\\.text|\\.text|\\.data|\\.rodata|)\\s+([0-9]+).* -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.HARDWARE.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.IDE.VERSION/value=10802 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.REFERENCED.PLATFORM.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA-1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ARDUINOOTA1.1.1.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/arduinoOTA/1.1.1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC-4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVR-GCC4.9.2-ATMEL3.5.4-ARDUINO2.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE-6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.AVRDUDE6.3.0-ARDUINO9.PATH/value=${eclipse_home}/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL-0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.13.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.13 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.ESPTOOL0.4.9.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/esptool/0.4.9 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS-0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.1.2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.1.2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.MKSPIFFS0.2.0.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/mkspiffs/0.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC-1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.RUNTIME.TOOLS.XTENSA-LX106-ELF-GCC1.20.0-26-GB404FB9-2.PATH/value=${eclipse_home}/arduinoPlugin/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2 -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLEDTR/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.DISABLERTS/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT.FILE/value=${A.SERIAL.PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SERIAL.PORT/value=${JANTJE.COM_PORT} -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.SOFTWARE/value=ARDUINO -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.AVRDUDE_REMOTE.UPLOAD.VERBOSE/value=-v -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA.UPLOAD.PATTERN/value=${A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESP8266OTA/value=${A.TOOLS.ESPTOOL.NETWORK_CMD} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.CMD/value=esptool.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK.PASSWORD/value=${A.TOOLS.ESPTOOL.NETWORK.AUTH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.NETWORK_CMD/value=python.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.PATH/value=${A.RUNTIME.TOOLS.ESPTOOL.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.NETWORK_PATTERN/value="${A.TOOLS.ESPTOOL.NETWORK_CMD}" "${A.RUNTIME.PLATFORM.PATH}/tools/espota.py" -i "${A.SERIAL.PORT}" -p "${A.TOOLS.ESPTOOL.NETWORK.PORT}" "--auth\=${A.TOOLS.ESPTOOL.NETWORK.PASSWORD}" -f "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.QUIET/value= -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PARAMS.VERBOSE/value=-vv -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PATTERN/value="${A.TOOLS.ESPTOOL.PATH}/${A.TOOLS.ESPTOOL.CMD}" ${A.TOOLS.ESPTOOL.UPLOAD.VERBOSE} -cd ${A.UPLOAD.RESETMETHOD} -cb ${A.UPLOAD.SPEED} -cp "${A.SERIAL.PORT}" -ca 0x00000 -cf "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.ESPTOOL.UPLOAD.PROTOCOL/value=esp -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.CMD/value=mkspiffs.exe -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.TOOLS.MKSPIFFS.PATH/value=${A.RUNTIME.TOOLS.MKSPIFFS.PATH} -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.ALTID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_DATA_SIZE/value=81920 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.MAXIMUM_SIZE/value=958448 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.PROTOCOL/value=stk500v1 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.RESETMETHOD/value=nodemcu -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.SPEED/value=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.TOOL/value=esptool -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.USBID/value=no_altID -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/A.VERSION/value=2.2.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ARCHITECTURE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARDS_FILE/value=C\:\\Users\\mpand\\eclipse\\arduinoPlugin\\packages\\esp8266\\hardware\\esp8266\\2.3.0\\boards.txt -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_ID/value=esp8285 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.BOARD_NAME/value=Generic ESP8285 Module -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.COM_PORT/value=COM13 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.ECLIPSE_LOCATION/value=C\:\\Users\\mpand\\eclipse\\ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ALL/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ARCHIVE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.ASSEMBLY/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.C.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.CPP.COMPILE/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.EXTRA.LINK/value= -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MAKE_LOCATION/value=${eclipse_home}/arduinoPlugin/tools/make/ -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.MENU/value=CpuFrequency\=80\nFlashSize\=1M64\nResetMethod\=nodemcu\nUploadSpeed\=115200 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OBJCOPY/value=${A.RECIPE.OBJCOPY.HEX.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.OS_NAME/value=win32 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PACKAGE_ID/value=esp8266 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.PROJECT_NAME/value=ITS1A -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SELECTED.PLATFORM/value=${eclipse_home}/arduinoPlugin/packages/esp8266/hardware/esp8266/2.3.0 -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN} -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.UPLOAD/value=Default -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WARNING_LEVEL/value=true -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/JANTJE.WORKSPACE_LOCATION/value=C\:\\Users\\mpand\\eclipse-workspace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/delimiter=; -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/operation=replace -environment/project/io.sloeber.core.toolChain.release.34549407/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${SystemRoot}\\system32${PathDelimiter}${SystemRoot}${PathDelimiter}${SystemRoot}\\system32\\Wbem${PathDelimiter}${sloeber_path_extension} -environment/project/io.sloeber.core.toolChain.release.34549407/append=true -environment/project/io.sloeber.core.toolChain.release.34549407/appendContributed=true diff --git a/.svn/pristine/b7/b71483beeabb8197e7681774f7c84eaf0dfb905a.svn-base b/.svn/pristine/b7/b71483beeabb8197e7681774f7c84eaf0dfb905a.svn-base deleted file mode 100644 index af6b70e..0000000 --- a/.svn/pristine/b7/b71483beeabb8197e7681774f7c84eaf0dfb905a.svn-base +++ /dev/null @@ -1,778 +0,0 @@ -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } -#define ALEXA -#define OTA - -#include "Arduino.h" -#include -#include -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#ifdef ALEXA -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); -#ifdef ALEXA -fauxmoESP fauxmo; -#endif -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Test"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *out_effect = &ConfigSet1::out_effect; - ByteConfigItem *in_effect = &ConfigSet1::in_effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - BooleanConfigItem *hv = &ConfigSet1::hv; - - // Alexa config values - StringConfigItem *date_name = &ConfigSet1::date_name; - StringConfigItem *backlight_name = &ConfigSet1::backlight_name; - StringConfigItem *clock_name = &ConfigSet1::clock_name; - StringConfigItem *test_name = &ConfigSet1::test_name; - StringConfigItem *cycling_name = &ConfigSet1::cycling_name; - StringConfigItem *twelve_hour_name = &ConfigSet1::twelve_hour_name; - StringConfigItem *zero_name = &ConfigSet1::zero_name; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - out_effect = static_cast(config->get("out_effect")); - in_effect = static_cast(config->get("in_effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - hv = static_cast(config->get("hv")); - - // Alexa config values - date_name = static_cast(config->get("date_name")); - backlight_name = static_cast(config->get("backlight_name")); - clock_name = static_cast(config->get("clock_name")); - test_name = static_cast(config->get("test_name")); - cycling_name = static_cast(config->get("cycling_name")); - twelve_hour_name = static_cast(config->get("twelve_hour_name")); - zero_name = static_cast(config->get("zero_name")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setHV(*CurrentConfig::hv); - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setOutEffect(*CurrentConfig::out_effect); - clock.setInEffect(*CurrentConfig::in_effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSConfigHandler wsAlexaHandler(rootConfig, "alexa"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -String *items[] = { - &WSMenuHandler::clockMenu, - &WSMenuHandler::ledsMenu, - &WSMenuHandler::extraMenu, - &WSMenuHandler::alexaMenu, - &WSMenuHandler::presetsMenu, - &WSMenuHandler::infoMenu, - &WSMenuHandler::presetNamesMenu, - 0 -}; - -WSMenuHandler wsMenuHandler(items); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsAlexaHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else if (screen == 7) { // Alexa switch names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { -#ifdef ALEXA - StringConfigItem *sItem = static_cast(item); - int deviceId = fauxmo.getDeviceId(sItem->value.c_str()); - if (deviceId > 0) { - fauxmo.renameDevice(deviceId, value.c_str()); - } - item->fromString(value); - item->put(); - broadcastUpdate(*item); -#endif - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void startFauxMo() { - fauxmo.enable(true); - fauxmo.addDevice(CurrentConfig::date_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::backlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::clock_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::test_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::cycling_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::twelve_hour_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::zero_name->value.c_str()); - - fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state) { - BooleanConfigItem *item = 0; - switch (device_id) { - case 0: - item = &(*CurrentConfig::time_or_date = !state); - break; - case 1: - item = &(*CurrentConfig::backlight = state); - break; - case 2: - item = &(*CurrentConfig::hv = state); - break; - case 3: - item = &(*CurrentConfig::display = !state); - break; - case 4: - item = &(*CurrentConfig::hue_cycling = state); - break; - case 5: - item = &(*CurrentConfig::hour_format = state); - break; - case 6: - item = &(*CurrentConfig::leading_zero = state); - break; - } - - if (item != 0) { - item->put(); - } - broadcastUpdate(*item); - }); - fauxmo.onGetState([](unsigned char device_id, const char * device_name) { - bool ret = false; - switch (device_id) { - case 0: - ret = *CurrentConfig::time_or_date; - ret = !ret; - break; - case 1: - ret = *CurrentConfig::backlight; - break; - case 2: - ret = *CurrentConfig::hv; - break; - case 3: - ret = *CurrentConfig::display; - ret = !ret; - break; - case 4: - ret = *CurrentConfig::hue_cycling; - break; - case 5: - ret = *CurrentConfig::hour_format; - break; - case 6: - ret = *CurrentConfig::leading_zero; - break; - } - - return ret; - }); -} - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); - - startFauxMo(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); -#ifdef ALEXA - fauxmo.handle(); -#endif - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/b8/b876de898b60549e2af01a31b75f282e69abd9a5.svn-base b/.svn/pristine/b8/b876de898b60549e2af01a31b75f282e69abd9a5.svn-base deleted file mode 100644 index b21030d..0000000 --- a/.svn/pristine/b8/b876de898b60549e2af01a31b75f282e69abd9a5.svn-base +++ /dev/null @@ -1,260 +0,0 @@ -#!/usr/bin/env node - -/* - * A test server - */ -'use strict'; - -var expressStaticGzip = require("express-static-gzip"); -var express = require('express'); -var http = require('http'); -var ws = require('ws'); - -var app = new express(); - -var server = http.createServer(app); - -var wss = new ws.Server({ server }); - -app.use(function(req, res, next) { - console.log(req.originalUrl); - next(); -}); - -app.use(expressStaticGzip("web")); - -var pages = { - "type":"sv.init.menu", - "value": [ - {"1": { "url" : "clock.html", "title" : "Clock" }}, - {"2": { "url" : "leds.html", "title" : "LEDs" }}, - {"3": { "url" : "extra.html", "title" : "Extra" }}, - {"7": { "url" : "alexa.html", "title" : "Alexa" }}, - {"4": { "url" : "presets.html", "title" : "Presets", "noNav" : true }}, - {"5": { "url" : "info.html", "title" : "Info" }}, - {"6": { "url" : "preset_names.html", "title" : "Preset Names", "noNav" : true}} - ] - } - - -var sendValues = function(conn, screen) { -} - -var sendPages = function(conn) { - var json = JSON.stringify(pages); - conn.send(json); - console.log(json); -} - -var sendClockValues = function(conn) { - var json = '{"type":"sv.init.clock","value":'; - json += JSON.stringify(state[1]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendLEDValues = function(conn) { - var json = '{"type":"sv.init.leds","value":'; - json += JSON.stringify(state[2]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendExtraValues = function(conn) { - var json = '{"type":"sv.init.extra","value":'; - json += JSON.stringify(state[3]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetValues = function(conn) { - var json = '{"type":"sv.init.presets","value":'; - json += JSON.stringify(state[4]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendInfoValues = function(conn) { - var json = '{"type":"sv.init.info","value":'; - json += JSON.stringify(state[5]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendPresetNames = function(conn) { - var json = '{"type":"sv.init.preset_names","value":'; - json += JSON.stringify(state[6]); - json += '}'; - console.log(json); - conn.send(json); -} - -var sendAlexa = function(conn) { - var json = '{"type":"sv.init.alexa","value":'; - json += JSON.stringify(state[7]); - json += '}'; - console.log(json); - conn.send(json); -} - -var state = { - "1": { - 'time_or_date': true, - 'date_format': 1, - 'hour_format': true, - 'fading': 2, - 'colons': 1, - 'leading_zero': true, - 'display_on': 10, - 'display_off': 20, - 'time_server': 'http://niobo.us/blah', - 'set_icon_clock': 'Foo' - }, - "2": { - 'backlight': true, - 'hue_cycling': false, - 'cycle_time': 100, - 'hue': 180, - 'saturation': 190, - 'brightness': 200, - 'set_icon_leds': 'Bar' - }, - "3": { - 'show_date': 1, - 'out_effect': 2, - 'in_effect': 3, - 'display': true, - 'test': 60, - 'reset_time': 2500, - 'set_time': 200, - 'hv': true, - 'set_icon_extra': 'Bletch' - }, - "4": { - 'preset' : 'set3' - }, - "5": { - 'esp_boot_version' : "1234", - 'esp_free_heap' : "5678", - 'esp_sketch_size' : "90123", - 'esp_sketch_space' : "4567", - 'esp_flash_size' : "8901", - 'esp_chip_id' : "chip id", - 'wifi_ip_address' : "192.168.1.1", - 'wifi_mac_address' : "0E:12:34:56:78", - 'wifi_ssid' : "STC-Wonderful" - }, - "6": { - 'set1_name' : 'Clock 1', - 'set2_name' : 'Clock 2', - 'set3_name' : 'Clock 3', - 'set4_name' : 'Conditioner', - 'set5_name' : 'Manual' - }, - "7": { - 'date_name' : 'date', - 'backlight_name' : 'backlight', - 'clock_name' : 'clock', - 'test_name' : 'test', - 'cycling_name' : 'hue cycling', - 'twelve_hour_name' : '12 hour', - 'zero_name' : 'leading zero' - } -} - -var broadcastUpdate = function(conn, field, value) { - var json = '{"type":"sv.update","value":{' + '"' + field + '":' + value + '}}'; - console.log(json); - try { - conn.send(json); - } catch (e) { - - } -} - -var updateValue = function(conn, screen, pair) { - console.log(pair); - var index = pair.indexOf(':'); - - var key = pair.substring(0, index); - var value = pair.substring(index+1); - try { - value = JSON.parse(value); - } catch (e) { - - } - - if (screen == 4 || screen == 6) { - state[screen][key] = '"' + value + '"'; - } else { - state[screen][key] = value; - } - broadcastUpdate(conn, key, state[screen][key]); -} - -var updateHue = function(conn) { - var hue = state['2']['hue']; - hue = (hue + 1) % 256; -// updateValue(conn, 2, "hue:" + hue); -} - -wss.on('connection', function(conn) { - console.log('connected'); - var hueTimer = setInterval(updateHue, 500, conn); - - //connection is up, let's add a simple simple event - conn.on('message', function(message) { - - //log the received message and send it back to the client - console.log('received: %s', message); - var code = parseInt(message.substring(0, message.indexOf(':'))); - - switch (code) { - case 0: - sendPages(conn); - break; - case 1: - sendClockValues(conn); - break; - case 2: - sendLEDValues(conn); - break; - case 3: - sendExtraValues(conn); - break; - case 4: - sendPresetValues(conn); - break; - case 5: - sendInfoValues(conn); - break; - case 6: - sendPresetNames(conn); - break; - case 7: - sendAlexa(conn); - break; - case 9: - message = message.substring(message.indexOf(':')+1); - var screen = message.substring(0, message.indexOf(':')); - var pair = message.substring(message.indexOf(':')+1); - updateValue(conn, screen, pair); - break; - } - }); - - conn.on('close', function() { - clearInterval(hueTimer); - }); -}); - -//start our server -server.listen(process.env.PORT || 8080, function() { - console.log('Server started on port' + server.address().port + ':)'); -}); - diff --git a/.svn/pristine/c5/c56af0b48567bdef4cf57a0ef6a8e0b7c6472bf2.svn-base b/.svn/pristine/c5/c56af0b48567bdef4cf57a0ef6a8e0b7c6472bf2.svn-base deleted file mode 100644 index 49ea8ce..0000000 --- a/.svn/pristine/c5/c56af0b48567bdef4cf57a0ef6a8e0b7c6472bf2.svn-base +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - STC - - - - - - - - - - - - - - - - - - - - -
-
-

nixies.us - STC

-
- -
- - \ No newline at end of file diff --git a/.svn/pristine/ce/ce01624af9414edf0dbd3a529240ed512970a0af.svn-base b/.svn/pristine/ce/ce01624af9414edf0dbd3a529240ed512970a0af.svn-base deleted file mode 100644 index 0b9ac26..0000000 --- a/.svn/pristine/ce/ce01624af9414edf0dbd3a529240ed512970a0af.svn-base +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - STC - - - - - - - - - - - - - - -
-
-

nixies.us - STC

-
- -
- - \ No newline at end of file diff --git a/.svn/pristine/ce/ce821ba580aaf0a413e1ce5386454cb9e0de13cc.svn-base b/.svn/pristine/ce/ce821ba580aaf0a413e1ce5386454cb9e0de13cc.svn-base deleted file mode 100644 index b2bfad0..0000000 --- a/.svn/pristine/ce/ce821ba580aaf0a413e1ce5386454cb9e0de13cc.svn-base +++ /dev/null @@ -1,4 +0,0 @@ -var gulp = require('gulp'); -require('./gulpfile.js'); - -gulp.start(process.argv[2]); diff --git a/.svn/pristine/cf/cf49057e839817b4a22c9de5f8c22e3ba722936f.svn-base b/.svn/pristine/cf/cf49057e839817b4a22c9de5f8c22e3ba722936f.svn-base deleted file mode 100644 index 1a47216..0000000 --- a/.svn/pristine/cf/cf49057e839817b4a22c9de5f8c22e3ba722936f.svn-base +++ /dev/null @@ -1,814 +0,0 @@ -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } -#define ALEXA -#define OTA - -#include "Arduino.h" -#include -#include -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#ifdef ALEXA -#include -#endif -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); -#ifdef ALEXA -fauxmoESP fauxmo; -#endif -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Manual"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -// Alexa config values -StringConfigItem date_name("date_name", 20, String("date")); -StringConfigItem backlight_name("backlight_name", 20, String("backlight")); -StringConfigItem clock_name("clock_name", 20, String("clock")); -StringConfigItem test_name("test_name", 20, String("test")); -StringConfigItem cycling_name("cycling_name", 20, String("hue cycling")); -StringConfigItem twelve_hour_name("twelve_hour_name", 20, String("12 hour")); -StringConfigItem zero_name("zero_name", 20, String("leading zero")); - -BaseConfigItem *alexaSet[] = { - // Alexa - &date_name, - &backlight_name, - &clock_name, - &test_name, - &cycling_name, - &twelve_hour_name, - &zero_name, - 0 -}; - -CompositeConfigItem alexaConfig("alexa", 0, alexaSet); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - &alexaConfig, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *out_effect = &ConfigSet1::out_effect; - ByteConfigItem *in_effect = &ConfigSet1::in_effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - BooleanConfigItem *hv = &ConfigSet1::hv; - - // Alexa config values - StringConfigItem *date_name = &::date_name; - StringConfigItem *backlight_name = &::backlight_name; - StringConfigItem *clock_name = &::clock_name; - StringConfigItem *test_name = &::test_name; - StringConfigItem *cycling_name = &::cycling_name; - StringConfigItem *twelve_hour_name = &::twelve_hour_name; - StringConfigItem *zero_name = &::zero_name; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - out_effect = static_cast(config->get("out_effect")); - in_effect = static_cast(config->get("in_effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - hv = static_cast(config->get("hv")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setHV(*CurrentConfig::hv); - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setOutEffect(*CurrentConfig::out_effect); - clock.setInEffect(*CurrentConfig::in_effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -void setTimeFromWifiManager() { - static String oldWifiTime = ""; - - const String &wifiTime = wifiManager.getWifiTime(); - if (wifiTime != oldWifiTime) { - DEBUG(String("Setting time from wifi manager") + wifiTime); - int intValues[6]; - grabInts(wifiTime, &intValues[0], ","); - - timeInitialized = true; - oldWifiTime = wifiTime; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); - } -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { -#ifdef OTA - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -#endif //OTA -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSGlobalConfigHandler wsAlexaHandler(rootConfig, "alexa"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -String *items[] = { - &WSMenuHandler::clockMenu, - &WSMenuHandler::ledsMenu, - &WSMenuHandler::extraMenu, - &WSMenuHandler::alexaMenu, - &WSMenuHandler::presetsMenu, - &WSMenuHandler::infoMenu, - &WSMenuHandler::presetNamesMenu, - 0 -}; - -WSMenuHandler wsMenuHandler(items); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler, - &wsAlexaHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else if (screen == 7) { // Alexa switch names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { -#ifdef ALEXA - StringConfigItem *sItem = static_cast(item); - int deviceId = fauxmo.getDeviceId(sItem->value.c_str()); - if (deviceId > 0) { - fauxmo.renameDevice(deviceId, value.c_str()); - } - item->fromString(value); - item->put(); - broadcastUpdate(*item); -#endif - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void startFauxMo() { - fauxmo.enable(true); - fauxmo.addDevice(CurrentConfig::date_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::backlight_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::clock_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::test_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::cycling_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::twelve_hour_name->value.c_str()); - fauxmo.addDevice(CurrentConfig::zero_name->value.c_str()); - - fauxmo.onSetState([](unsigned char device_id, const char *device_name, bool state) { - BooleanConfigItem *item = 0; - switch (device_id) { - case 0: - item = &(*CurrentConfig::time_or_date = !state); - break; - case 1: - item = &(*CurrentConfig::backlight = state); - break; - case 2: - item = &(*CurrentConfig::hv = state); - break; - case 3: - item = &(*CurrentConfig::display = !state); - break; - case 4: - item = &(*CurrentConfig::hue_cycling = state); - break; - case 5: - item = &(*CurrentConfig::hour_format = state); - break; - case 6: - item = &(*CurrentConfig::leading_zero = state); - break; - } - - if (item != 0) { - item->put(); - } - broadcastUpdate(*item); - }); - fauxmo.onGetState([](unsigned char device_id, const char * device_name) { - bool ret = false; - switch (device_id) { - case 0: - ret = *CurrentConfig::time_or_date; - ret = !ret; - break; - case 1: - ret = *CurrentConfig::backlight; - break; - case 2: - ret = *CurrentConfig::hv; - break; - case 3: - ret = *CurrentConfig::display; - ret = !ret; - break; - case 4: - ret = *CurrentConfig::hue_cycling; - break; - case 5: - ret = *CurrentConfig::hour_format; - break; - case 6: - ret = *CurrentConfig::leading_zero; - break; - } - - return ret; - }); -} - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); - - startFauxMo(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(true); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ -#ifdef OTA - ArduinoOTA.handle(); -#endif - wifiManager.loop(); - setTimeFromWifiManager(); -#ifdef ALEXA - fauxmo.handle(); -#endif - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/d6/d61a97be44efbf15df0dbe641a6e615cfbf71fed.svn-base b/.svn/pristine/d6/d61a97be44efbf15df0dbe641a6e615cfbf71fed.svn-base deleted file mode 100644 index c18ca4f..0000000 --- a/.svn/pristine/d6/d61a97be44efbf15df0dbe641a6e615cfbf71fed.svn-base +++ /dev/null @@ -1,648 +0,0 @@ -#define ONE_TUBE - -//#define DEBUG_ESP_WIFI -//#define DEBUG_ESP_PORT Serial - -//#define DEBUG(...) { Serial.println(__VA_ARGS__); } -#define DEBUG(...) { } - -#include "Arduino.h" -#include -#include -#define OTA -#ifdef OTA -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -unsigned long nowMs = 0; - -String chipId = String(ESP.getChipId(), HEX); -String ssid = "STC-"; - -StringConfigItem hostName("hostname", 63, "ITS1A"); - -AsyncWebServer server(80); -AsyncWebSocket ws("/ws"); // access at ws://[esp ip]/ws -AsyncHTTPClient httpClient; -DNSServer dns; -AsyncWiFiManager wifiManager(&server,&dns); - -ITS1ANixieDriver nixieDriver(6); -NixieDriver *pDriver = &nixieDriver; -SixNixieClock sixNixieClock(pDriver); -NixieClock *pNixieClock = &sixNixieClock; -bool timeInitialized = false; - -class Configurator { -public: - virtual void configure() = 0; -}; - -namespace ConfigSet1 { -#include -} - -namespace ConfigSet2 { -#include -} // End namespace - -namespace ConfigSet3 { -#include -} // End namespace - -namespace ConfigSet4 { -#include -} // End namespace - -namespace ConfigSet5 { -#include -} // End namespace - -StringConfigItem set1Name("set1_name", 12, "24 Hour"); -StringConfigItem set2Name("set2_name", 12, "12 Hour"); -StringConfigItem set3Name("set3_name", 12, "Fast Clock"); -StringConfigItem set4Name("set4_name", 12, "Test"); -StringConfigItem set5Name("set5_name", 12, "Test"); -BaseConfigItem *configSetPresetNames[] = { - &set1Name, - &set2Name, - &set3Name, - &set4Name, - &set5Name, - 0 -}; - -CompositeConfigItem presetNamesConfig("preset_names", 0, configSetPresetNames); - -StringConfigItem currentSet("current_set", 4, "set1"); - -BaseConfigItem *configSetGlobal[] = { - &hostName, - ¤tSet, - 0 -}; - -CompositeConfigItem globalConfig("global", 0, configSetGlobal); - -BaseConfigItem *configSetRoot[] = { - &globalConfig, - &presetNamesConfig, - &ConfigSet1::config, - &ConfigSet2::config, - &ConfigSet3::config, - &ConfigSet4::config, - &ConfigSet5::config, - 0 -}; - -CompositeConfigItem rootConfig("root", 0, configSetRoot); - -EEPROMConfig config(rootConfig); - -namespace CurrentConfig { - String name("set1"); - CompositeConfigItem *config = &ConfigSet1::config; - - // Clock config values - BooleanConfigItem *time_or_date = &ConfigSet1::time_or_date; - ByteConfigItem *date_format = &ConfigSet1::date_format; - BooleanConfigItem *hour_format = &ConfigSet1::hour_format; - BooleanConfigItem *leading_zero = &ConfigSet1::leading_zero; - ByteConfigItem *fading = &ConfigSet1::fading; - ByteConfigItem *colons = &ConfigSet1::colons; - ByteConfigItem *display_on = &ConfigSet1::display_on; - ByteConfigItem *display_off = &ConfigSet1::display_off; - StringConfigItem *time_url = &ConfigSet1::time_url; - - // LED config values - ByteConfigItem *hue = &ConfigSet1::hue; - ByteConfigItem *saturation = &ConfigSet1::saturation; - BooleanConfigItem *backlight = &ConfigSet1::backlight; - BooleanConfigItem *hue_cycling = &ConfigSet1::hue_cycling; - ByteConfigItem *led_scale = &ConfigSet1::led_scale; - IntConfigItem *cycle_time = &ConfigSet1::cycle_time; - - // Extra config values - ByteConfigItem *show_date = &ConfigSet1::show_date; - ByteConfigItem *effect = &ConfigSet1::effect; - BooleanConfigItem *display = &ConfigSet1::display; - ByteConfigItem *test_speed = &ConfigSet1::test_speed; - IntConfigItem *reset_time = &ConfigSet1::reset_time; - IntConfigItem *set_time = &ConfigSet1::set_time; - - void setCurrent(const String &name) { - if (CurrentConfig::name == name) { - return; // Already set to this - } - - BaseConfigItem *newConfig = rootConfig.get(name.c_str()); - - if (newConfig) { - DEBUG("Changing preset to:"); - DEBUG(name); - CurrentConfig::name = name; - config = static_cast(newConfig); - - /* - * I hate doing this. - */ - - // Clock config values - time_or_date = static_cast(config->get("time_or_date")); - date_format = static_cast(config->get("date_format")); - hour_format = static_cast(config->get("hour_format")); - leading_zero = static_cast(config->get("leading_zero")); - fading = static_cast(config->get("fading")); - colons = static_cast(config->get("colons")); - display_on = static_cast(config->get("display_on")); - display_off = static_cast(config->get("display_off")); - time_url = static_cast(config->get("time_url")); - - // LED config values - hue = static_cast(config->get("hue")); - saturation = static_cast(config->get("saturation")); - backlight = static_cast(config->get("backlight")); - hue_cycling = static_cast(config->get("hue_cycling")); - led_scale = static_cast(config->get("led_scale")); - cycle_time = static_cast(config->get("cycle_time")); - - // Extra config values - show_date = static_cast(config->get("show_date")); - effect = static_cast(config->get("effect")); - display = static_cast(config->get("display")); - test_speed = static_cast(config->get("test_speed")); - reset_time = static_cast(config->get("reset_time")); - set_time = static_cast(config->get("set_time")); - - BaseConfigItem *currentSetName = rootConfig.get("current_set"); - currentSetName->fromString(name); - currentSetName->put(); - } - } -} - -class ITS1ANixieDriverConfigurator : Configurator { -public: - ITS1ANixieDriverConfigurator(ITS1ANixieDriver &driver) : driver(driver) { - - } - - virtual void configure() { - driver.setIndicator(*CurrentConfig::colons); - driver.setResetTime(*CurrentConfig::reset_time); - driver.setSetTime(*CurrentConfig::set_time); - } - -private: - ITS1ANixieDriver &driver; -}; - -class SixNixieClockConfigurator : Configurator { -public: - SixNixieClockConfigurator(SixNixieClock &clock) : clock(clock) { - } - - virtual void configure() { - if (timeInitialized || !*CurrentConfig::display) { - clock.setClockMode(*CurrentConfig::display); - clock.setCountSpeed(*CurrentConfig::test_speed); - } else { - clock.setClockMode(false); - clock.setCountSpeed(60); - } - - clock.setFadeMode(*CurrentConfig::fading); - clock.setTimeMode(*CurrentConfig::time_or_date); - clock.setDateFormat(*CurrentConfig::date_format); - clock.set12hour(*CurrentConfig::hour_format); - clock.setLeadingZero(*CurrentConfig::leading_zero); - clock.setOnOff(*CurrentConfig::display_on, *CurrentConfig::display_off); - clock.setAlternateInterval(*CurrentConfig::show_date); - clock.setEffect(*CurrentConfig::effect); - } - -private: - SixNixieClock &clock; -}; - -ITS1ANixieDriverConfigurator driverConfigurator(nixieDriver); -SixNixieClockConfigurator clockConfigurator(sixNixieClock); - -void initClock() { - pDriver->init(); - pNixieClock->setNixieDriver(pDriver); - pNixieClock->init(); -} - -void grabInts(String s, int *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void grabBytes(String s, byte *dest, String sep) { - int end = 0; - for (int start = 0; end != -1; start = end + 1) { - end = s.indexOf(sep, start); - if (end > 0) { - *dest++ = s.substring(start, end).toInt(); - } else { - *dest++ = s.substring(start).toInt(); - } - } -} - -void readTimeFailed(String msg) { - DEBUG(msg); -} - -#define SYNC_HOURS 3 -#define SYNC_MINS 4 -#define SYNC_SECS 5 -#define SYNC_DAY 2 -#define SYNC_MONTH 1 -#define SYNC_YEAR 0 - -void setTimeFromInternet() { - String body = httpClient.getBody(); - DEBUG(String("Got response") + body); - int intValues[6]; - grabInts(body, &intValues[0], ","); - - timeInitialized = true; - setTime(intValues[SYNC_HOURS], intValues[SYNC_MINS], intValues[SYNC_SECS], intValues[SYNC_DAY], intValues[SYNC_MONTH], intValues[SYNC_YEAR]); -} - -const byte numLEDs = 8; - -LEDRGB leds(numLEDs, 1); - -void ledDisplay(bool on=true) { - // Scale normalized brightness to range 0..255 - byte brightness = *CurrentConfig::led_scale; - leds.ledDisplay(*CurrentConfig::hue, *CurrentConfig::saturation, brightness); -} - -void ledTimerHandler() { - ledDisplay(); - if (*CurrentConfig::hue_cycling) { - broadcastUpdate(*CurrentConfig::hue); - *CurrentConfig::hue = (*CurrentConfig::hue + 1) % 256; - } -} - -AsyncWiFiManagerParameter *hostnameParam; - -void initFromEEPROM() { -// config.setDebugPrint(debugPrint); - config.init(); -// rootConfig.debug(debugPrint); - DEBUG(hostName); - rootConfig.get(); // Read all of the config values from EEPROM - String currentSetName = currentSet; - CurrentConfig::setCurrent(currentSetName); - DEBUG(hostName); - - hostnameParam = new AsyncWiFiManagerParameter("Hostname", "clock host name", hostName.value.c_str(), 63); -} - -void createSSID() { - // Create a unique SSID that includes the hostname. Max SSID length is 32! - ssid = (chipId + hostName).substring(0, 31); -} - -void getTime() { - if (WiFi.status() == WL_CONNECTED) { - httpClient.makeRequest(setTimeFromInternet, readTimeFailed); - } -} - -void StartOTA() { - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(((String)hostName).c_str()); - - // No authentication by default -// ArduinoOTA.setPassword("in14"); - - ArduinoOTA.onStart([]() {DEBUG("OTA Start");}); - ArduinoOTA.onEnd([]() {DEBUG("\nOTA End");}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DEBUG("OTA Progress: ");DEBUG(progress / (total / 100));DEBUG("\r"); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG("OTA Error:") - switch (error) { - case OTA_AUTH_ERROR: DEBUG("Auth Failed"); break; - case OTA_BEGIN_ERROR: DEBUG("Begin Failed"); break; - case OTA_CONNECT_ERROR: DEBUG("Connect Failed"); break; - case OTA_RECEIVE_ERROR: DEBUG("Receive Failed"); break; - case OTA_END_ERROR: DEBUG("End Failed"); break; - } - }); - - ArduinoOTA.begin(); -} - -void mainHandler(AsyncWebServerRequest *request) { - DEBUG("Got request") - request->send(SPIFFS, "/index.html"); -} - -void sendFavicon(AsyncWebServerRequest *request) { - DEBUG("Got favicon request") - request->send(SPIFFS, "/assets/favicon-32x32.png", "image/png"); -} - -void broadcastUpdate(const BaseConfigItem& item) { - const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(1); - DynamicJsonBuffer jsonBuffer(bufferSize); - - JsonObject& root = jsonBuffer.createObject(); - root["type"] = "sv.update"; - - JsonObject& value = root.createNestedObject("value"); - String rawJSON = item.toJSON(); // This object needs to hang around until we are done serializing. - value[item.name] = ArduinoJson::RawJson(rawJSON.c_str()); - -// root.printTo(*debugPrint); - - size_t len = root.measureLength(); - AsyncWebSocketMessageBuffer * buffer = ws.makeBuffer(len); // creates a buffer (len + 1) for you. - if (buffer) { - root.printTo((char *)buffer->get(), len + 1); - ws.textAll(buffer); - } -} - -WSMenuHandler wsMenuHandler(0); -WSConfigHandler wsClockHandler(rootConfig, "clock"); -WSConfigHandler wsLEDHandler(rootConfig, "leds"); -WSConfigHandler wsExtraHandler(rootConfig, "extra"); -WSPresetValuesHandler wsPresetValuesHandler(rootConfig); -WSInfoHandler wsInfoHandler(ssid); -WSPresetNamesHandler wsPresetNamesHandler(rootConfig); - -WSHandler *wsHandlers[] = { - &wsMenuHandler, - &wsClockHandler, - &wsLEDHandler, - &wsExtraHandler, - &wsPresetValuesHandler, - &wsInfoHandler, - &wsPresetNamesHandler -}; - -void updateValue(int screen, String pair) { - int index = pair.indexOf(':'); - DEBUG(pair) - // _key has to hang around because key points to an internal data structure - String _key = pair.substring(0, index); - const char* key = _key.c_str(); - String value = pair.substring(index+1); - if (screen == 4) { // Presets - CurrentConfig::setCurrent(value); - StringConfigItem temp(key, 10, value); - broadcastUpdate(temp); - } else if (screen == 6) { // Preset names - BaseConfigItem *item = rootConfig.get(key); - if (item != 0) { - item->fromString(value); - item->put(); - broadcastUpdate(*item); - } - } else { - BaseConfigItem *item = CurrentConfig::config->get(key); - if (item != 0) { - item->fromString(value); - item->put(); - // Shouldn't special case this stuff. Should attach listeners to the config value! - // TODO: This won't work if we just switch change sets instead! -#ifndef USE_NTP - if (strcmp(key, CurrentConfig::time_url->name) == 0) { - httpClient.initialize(value); - getTime(); - } -#endif - broadcastUpdate(*item); - } - } -} - -/* - * Handle application protocol - */ -void handleWSMsg(AsyncWebSocketClient *client, char *data) { - String wholeMsg(data); - int code = wholeMsg.substring(0, wholeMsg.indexOf(':')).toInt(); - - if (code < 9) { - wsHandlers[code]->handle(client, data); - } else { - String message = wholeMsg.substring(wholeMsg.indexOf(':')+1); - int screen = message.substring(0, message.indexOf(':')).toInt(); - String pair = message.substring(message.indexOf(':')+1); - updateValue(screen, pair); - } -} - -/* - * Handle transport protocol - */ -void wsHandler(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { - //Handle WebSocket event - switch (type) { - case WS_EVT_CONNECT: - DEBUG("WS connected") - ; - break; - case WS_EVT_DISCONNECT: - DEBUG("WS disconnected") - ; - break; - case WS_EVT_ERROR: - DEBUG("WS error") - ; - DEBUG((char* )data) - ; - break; - case WS_EVT_PONG: - DEBUG("WS pong") - ; - break; - case WS_EVT_DATA: // Yay we got something! - DEBUG("WS data") - ; - AwsFrameInfo * info = (AwsFrameInfo*) arg; - if (info->final && info->index == 0 && info->len == len) { - //the whole message is in a single frame and we got all of it's data - if (info->opcode == WS_TEXT) { - DEBUG("WS text data"); - data[len] = 0; - handleWSMsg(client, (char *) data); - } else { - DEBUG("WS binary data"); - } - } else { - DEBUG("WS data was split up!"); - } - break; - } -} - -void eepromUpdate() { - config.commit(); -} - -void snoozeUpdate(); - -void SetupServer() { - DEBUG("SetupServer()"); - hostName = String(hostnameParam->getValue()); - hostName.put(); - config.commit(); - DEBUG(hostName.value); - MDNS.begin(hostName.value.c_str()); - MDNS.addService("http", "tcp", 80); - StartOTA(); - - server.serveStatic("/", SPIFFS, "/"); - server.on("/", HTTP_GET, mainHandler).setFilter(ON_STA_FILTER); - server.on("/assets/favicon-32x32.png", HTTP_GET, sendFavicon); - server.serveStatic("/assets", SPIFFS, "/assets"); - - // attach AsyncWebSocket - ws.onEvent(wsHandler); - server.addHandler(&ws); - server.begin(); - ws.enable(true); - - getTime(); -} - -SoftMSTimer::TimerInfo syncTimeTimer = { - 3600000, // 1 hour between syncs - 0, - true, - getTime -}; - -SoftMSTimer::TimerInfo ledTimer = { - 60000, - 0, - true, - ledTimerHandler -}; - -SoftMSTimer::TimerInfo eepromUpdateTimer = { - 60000, - 0, - true, - eepromUpdate -}; - -SoftMSTimer::TimerInfo *infos[] = { - &syncTimeTimer, - &ledTimer, - &eepromUpdateTimer, - 0 -}; - -SoftMSTimer timedFunctions(infos); - -void setup() -{ - chipId.toUpperCase(); -// Serial.begin(921600); -// Serial.begin(115200); - - EEPROM.begin(1024); - SPIFFS.begin(); - - initFromEEPROM(); - - initClock(); - - createSSID(); - - DEBUG("Set wifiManager") - wifiManager.setDebugOutput(false); - wifiManager.setConnectTimeout(10); - wifiManager.addParameter(hostnameParam); - wifiManager.setSaveConfigCallback(SetupServer); - wifiManager.startConfigPortalModeless(ssid.c_str(), "secretsauce"); - - httpClient.initialize("http://time.nixies.us/getTime/America/New_York"); - getTime(); - - nowMs = millis(); - - DEBUG("Exit setup") -} - -int r = 256; -unsigned long nextMs = 0; - -void loop() -{ - ArduinoOTA.handle(); - wifiManager.loop(); - - nowMs = millis(); - - driverConfigurator.configure(); - clockConfigurator.configure(); - - bool clockOn = pNixieClock->isOn(); - - pNixieClock->loop(nowMs); - - if (*CurrentConfig::backlight && clockOn) { - ledTimer.interval = *CurrentConfig::cycle_time * 1000L / 256; - ledTimer.enabled = true; - } else { - if (ledTimer.enabled) { - ledTimer.enabled = false; - ledDisplay(false); - } - } - - timedFunctions.loop(); -} diff --git a/.svn/pristine/d6/d6c1f41972de07b09bfa63d2e50f9ab41ec372bd.svn-base b/.svn/pristine/d6/d6c1f41972de07b09bfa63d2e50f9ab41ec372bd.svn-base deleted file mode 100644 index ab28a24..0000000 --- a/.svn/pristine/d6/d6c1f41972de07b09bfa63d2e50f9ab41ec372bd.svn-base +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("